ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

python-为什么elementtree.ElementTree.iterparse使用这么多内存?

2019-10-09 12:57:29  阅读:369  来源: 互联网

标签:python memory xml 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有