python-为什么elementtree.ElementTree.iterparse使用这么多内存?
作者:互联网
我正在使用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与不使用两者相同(由任务管理器绘制).仅使用A似乎与同时使用两者相同.
第二-为什么这仍然消耗那么多内存?程序运行时,将在末尾使用大约100 MB的RAM.
我认为这与outf有关,但是为什么呢?它不只是写入磁盘吗?而且,如果它在关闭前存储数据,我该如何避免呢?
其他信息:
我在Windows上使用Python 2.7.3.
解决方法:
(发布的代码缩进第二行,不应运行.)
http://bugs.python.org/issue14762是一个类似的问题,答案是应该清除每个元素(A行).如果不知道什么是outf(或创建它的代码),很难回答第二个问题.如果它是一个StringIO对象,答案将显而易见.您可能会看到跟踪器问题的第二条消息中链接的教程:
http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/
标签:python,memory,xml,elementtree,iterparse 来源: https://codeday.me/bug/20191009/1879200.html