我有一个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 parser和 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()
注意.clear()
调用;释放元素并将其从内存中删除。
关于python - 使用过多 RAM 在 python 中处理 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12303423/