是否可以告诉pyparsing不存储ParseResults或手动丢弃它们?
我正在解析大型项目文件,并且可以通过解析操作对每个项目进行所有后期处理。因此,只要一个项目被解析,我就不再需要它的ParseResult了,并希望能够丢弃它,因为我正在达到我所在机器的内存限制。
答案 0 :(得分: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元组,每个连续匹配的起始位置和结束位置。您可以处理每个已解析的令牌集,然后当您转到下一个集时,旧集会自动被丢弃。我认为这可能是您最简单的方式,只需对您的程序进行最少的更改。