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

Yon*_*ing 2 python xml csv performance

我有一个大约 30MB 的 XML 文件,里面有大约 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)
Run Code Online (Sandbox Code Playgroud)

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

此致,

Mar*_*ers 5

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

标准库有一个SAX 解析器ElementTree.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()
Run Code Online (Sandbox Code Playgroud)

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