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 的内存。为什么这么简单的脚本和这么小的文件要占用这么多内存?
此致,
您将需要切换到迭代解析器,该解析器以块的形式处理 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()调用;释放元素并将其从内存中删除。
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |