我正在使用elementtree.ElementTree.iterparse解析一個大的(371 MB)xml文件。爲什麼elementtree.ElementTree.iterparse使用這麼多內存?
我的代碼基本上是這樣的:
outf = open('out.txt', 'w')
context = iterparse('copyright.xml')
context = iter(context)
dummy, root = context.next()
for event, elem in context:
if elem.tag == 'foo':
author = elem.text
elif elem.tag == 'bar':
if elem.text is not None and 'bat' in elem.text.lower():
outf.write(elem.text + '\n')
elem.clear() #line A
root.clear() #line B
我的問題是雙重的:
首先 - 我是否需要A和B(見代碼片斷評論)?我被告知root.clear()清除了不必要的子元素,因此內存不會被吞噬,但這裏是我的觀察結果:使用B而不是A與使用內存消耗(使用任務管理器繪製)無關。僅使用A似乎與使用兩者相同。
第二 - 爲什麼這仍然消耗這麼多的記憶?程序運行時,它在結尾處使用大約100 MB的RAM。
我認爲這與outf有關,但爲什麼?它不是隻寫磁盤嗎?如果它在存儲結束之前存儲這些數據,我該如何避免這種情況?
其他信息: 我在Windows上使用Python 2.7.3。
謝謝你的第一部分。在第二部分中,我編輯了這個問題以包含創建outf的代碼行。 – russell