我使用elementtree.ElementTree.iterparse解析大(371 MB)的XML文件。
我的代码基本上是这样的:
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是一样的使用无论是在内存占用(使用任务管理器绘制)的条款。 只使用似乎是一样同时使用。
第二 - 这是为什么仍会消耗这么多的内存? 在程序运行时,它使用约100 MB的接近尾声RAM。
我认为它是与OUTF,但是为什么呢? 是不是只是写入磁盘? 而如果它是存储数据OUTF关闭之前,我怎么能避免呢?
其他信息:我使用Python 2.7.3在Windows上。