python - 使用过多 RAM 在 python 中处理 XML 文件

标签 python xml performance csv

我有一个XML文件,大约30MB,里面有大约300000个元素。

我使用以下代码来处理该文件。

xmldoc=xml.dom.minidom.parse("badges.xml")

csv_out=open("badge.csv","w")

for badge in xmldoc.getElementsByTagName("row"):
    some processing here
    csv_out.write(line)

该文件只有 30MB,但当我在我的 MBP(10.7,8G RAM)上运行此脚本时,它使用了近 3GB 内存。为什么这么简单的脚本和这么小的文件占用这么多内存?

最诚挚的问候,

最佳答案

您需要切换到迭代解析器,它以 block 的形式处理 XML 语句,从而允许您清理之间的内存。 DOM 解析器将整个文档一次性加载到内存中。

标准库有 SAX parserElementTree.iterparse可供您选择。

快速迭代解析示例:

from xml.etree.ElementTree import iterparse

with open("badge.csv","w") as csvout:
    for event, elem in iterparse("badges.xml"):
        if event == 'end' and elem.tag == 'row': # Complete row tag
            # some processing here
            csv_out.write(line)
            elem.clear()

注意.clear()调用;释放元素并将其从内存中删除。

关于python - 使用过多 RAM 在 python 中处理 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12303423/

相关文章:

python - imaplib - Gmail 中存档/所有邮件的正确文件夹名称是什么?

java - 使用 Java StAX 解析 XML - 计算内容标签的数量

php - 使用 php 和 'if changed' 选项创建 xml

javascript - 我的 C++ 代码比 JavaScript 代码慢很多

c - 在 if else 的每种情况下返回会更快/使用更少的内存吗?

php - php中try-catch的性能

python - 按值获取列表中具有重复列名称的列表

python - python 透视图中的argument和parameter有什么区别[不重复:) ]?

python - 与Sublime Text一起使用时出现致命的Pylint错误

android - 改变某部分字符串的edittext的输入类型