5

是否可以告诉 pyparsing 不存储 ParseResults 或手动丢弃它们?

我正在解析一个大型项目文件,并且可以通过解析操作对每个项目进行所有后处理。因此,一旦一个项目被解析,我就不再需要它 ParseResult 并且希望能够丢弃它,因为我正在达到我所在机器的内存限制。

4

1 回答 1

4

您是否在解析令牌时使用解析操作来处理令牌?如果是这样,您可以使用 del 删除已解析标记的内容:

def parseActionThatDeletesTheParsedTokens(tokens):
    # ...
    # do something interesting with the tokens
    # ...

    # delete the contents of the parsed tokens
    del tokens[:]

或者您可能只想使用scanString而不是parseString. 而不是这个:

OneOrMore(blockOfText).parseString(bigHonkingString)

做:

for tokens, matchstart, matchend in blockOfText.scanString(bigHonkingString):
    # do stuff with the tokens

scanString返回一个生成器,它产生包含匹配标记、每个连续匹配的开始和结束位置的 3 元组。您可以处理每个已解析的令牌集,然后当您继续下一组时,旧集会自动丢弃。我认为这可能是您最简单的方法,只需对您的程序进行最少的更改。

于 2012-09-13T07:02:26.570 回答