【发布时间】:2012-06-28 07:43:04
【问题描述】:
我正在使用 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(参见代码 sn-p cmets)吗?有人告诉我 root.clear() 会清除不必要的子项,因此不会占用内存,但这是我的观察结果:在内存消耗方面,使用 B 而不是 A 与既不使用相同(使用任务管理器绘制)。仅使用 A 似乎与同时使用两者相同。
第二 - 为什么这仍然消耗这么多内存?当程序运行时,它在接近尾声时使用了大约 100 MB 的 RAM。
我认为它与 outf 有关,但为什么呢?它不只是写入磁盘吗?如果它在 outf 关闭之前存储该数据,我该如何避免呢?
其他信息: 我在 Windows 上使用 Python 2.7.3。
【问题讨论】:
标签: python xml memory elementtree iterparse