我正在使用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