2012-09-13 20 views
5

ParseResults'u ParseResults'u saklamama veya elden çıkarmalarını söylemek mümkün mü?Ayrıştırma sırasında ayrıştırma parseResults nasıl atılır?

Büyük bir öğe dosyası ayrıştırma yapıyorum ve her öğe için ayrıştırma eylemiyle tüm işlem sonrası işlemleri yapabilirim. Bir öğe ayrıştırıldıktan sonra, artık ParseResult'a ihtiyacım yok ve üzerinde olduğum makinenin bellek sınırını zorluyorsam onu ​​atabiliyorum.

cevap

4

Jetonları ayrıştırıldıkları sırada işlemek için parse eylemleri kullanıyor musunuz?

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

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

Ya da sadece scanString yerine parseString kullanmak isteyebilirsiniz: Eğer öyleyse, del kullanarak çözümlenen jeton içeriğini silebilirsiniz.

OneOrMore(blockOfText).parseString(bigHonkingString) 

do: Bunun yerine

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

scanString eşleşen bir belirteçleri, başlangıç ​​içeren 3-dizilerini verir jeneratör, ve her ardışık maçın bitiş konuma döndürür. Her ayrışmış belirteç kümesini işleyebilir, daha sonra bir sonraki kümeye geçtiğinizde, eski küme otomatik olarak atılır. Bu, programınızda en az değişiklikle, gitmenin en basit yolu olabileceğini düşünüyorum.

+0

Yup, işte bunu yapıyorum. Bunu yapmak için 'del' kullanmak benim için gerçekten olmalıydı, ama haklısın, scanString çok daha iyi. Pıhtılaşma bilmek çok güzel bu özelliği vardır. Teşekkürler! – nedned

+0

Paul, '' parseAction' çalıştırıldıktan sonra cümlenin içeriğini hala bellekte tutuyor mu? – Hooked

+0

Hayır - bir ifade bastırılırsa, içeriği pıhtılaşma ile kaydedilmez. – PaulMcG