2012-09-13 10 views
5

PyparsingにParseResultsを格納しないように指示することも、手動で破棄することもできますか?解析中にpyparsing parseResultsを破棄する方法はありますか?

私はアイテムの大きなファイルを解析しており、解析アクションによって各アイテムのすべての後処理を実行できます。だから、アイテムが解析されるとすぐに、ParseResultはそれ以上必要ではなく、私が使用しているマシンのメモリ制限にぶつかっているので、それを破棄できるようにしたいと思います。

答えて

4

構文解析されたトークンを処理するために解析アクションを使用していますか?

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タプルを生成ジェネレータ、および各連続試合の終了位置を返します。パースされた各トークンのセットを処理できます。次に、次のセットに移動すると、古いセットは自動的に破棄されます。私はこれがあなたのプログラムに最小限の変更を加えて、あなたが行くための最も簡単な方法かもしれないと思う。

+0

うん、それは私がやっていることだ。それを行うために 'del'を使うことは本当に私に起こっているはずですが、あなたは正しいと思います。 pyparsingにはこの機能があります。ありがとう! – nedned

+0

Paulは '.suppress()'を実行しても、 'parseAction'が実行された後でも内容をメモリに保持していますか? – Hooked

+0

いいえ - 式を省略すると、その内容はpyparsingによって保存されません。 – PaulMcG

関連する問題