我正在使用python的优秀xml
模块来处理我的一些xml文件。其中一个文件是250+ MB。解析时,它似乎挂起。运行top
表明它正在慢慢填满我的记忆,然后开始交换,但是不会返回超过一个小时(此时我会终止进程并搜索SO)。
我正在盯着这个过程:
>>> import xml.etree.ElementTree as ET
>>> tree = ET.parse('some_xml_file.xml')
但是,就我的任何尝试而言都是如此。较小的文件工作正常,但是这个大文件正在破坏。
什么是我的记忆的所有(4 GB),以及如何避免这种情况?
答案 0 :(得分:2)
xml.etree.ElementTree
documentation记录了这一段:
如果你不介意你的应用程序阻止读取XML数据,但是 仍然希望有增量解析功能,看一看 在
iterparse()
。 当您阅读大型XML时,它非常有用 文档,不想完全保存在内存中。
考虑使用iterparse()
以递增方式处理XML文件 。
另外,您应该考虑切换到lxml.etree
,因为它通常更快,更适合内存,来源: