我正在使用elementtree.ElementTree.iterparse解析大型(371 MB)xml文件.我的代码基本上是这样的:outf = open(out.txt, w) context = iterparse(copyright.xml)context = iter(context)dummy, root = cont...

我正在使用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-为什么elementtree.ElementTree.iterparse使用这么多内存?


基础教程推荐
- Python Type Hints 学习之从入门到实践 2023-08-08
- 在Fedora Linux上的Jupyter中运行Python 2和3 2023-11-14
- Python调用百度AI实现人像分割详解 2023-08-04
- Python pymysql向SQL语句中传参的多种方法 2023-08-04
- Python实现绘制Matlab格式的地图边框的示例代码 2022-10-20
- Centos7中安装python3 2023-11-12
- 从Windows命令行启动Python脚本:脚本启动,然后失败 2023-11-15
- Python – 在守护进程中调用multiprocessing.pool 2023-11-16
- shell脚本安装python、pip--不需要选择安装项目 2023-09-04
- 转:ubuntu16安装python3.6并将环境设置为系统默认 2023-09-03