Python xml ElementTree能解析一个非常大的xml文件吗?
我试图解析一个大型文件(> 2GB)的结构化标记数据和内存是不够的,这是这种情况的XML解析类的最佳方式。请更多详细信息。Python xml ElementTree能解析一个非常大的xml文件吗?
大多数DOM库(如ElementTree)都在核心中构建了整个文档模型。传统上,当您的模型太大而无法一次装入内存时,您需要使用更多面向流的解析器,如xml.sax。
这通常比您期望的要难,特别是在用于像一次处理整个DOM的高阶操作时。
有没有可能是你的XML文档而不是简单的像
<entries>
<entry>...</entry>
<entry>...</entry>
</entries>
这将让你更ElementTree的友好的方式对数据子集的工作?
我见过,可以处理这种在所有的事物的API是pulldom:
http://docs.python.org/library/xml.dom.pulldom.html
Pulldom使用SAX API构建部分DOM节点;通过将特定的子树作为一个组提取,然后在完成时丢弃它们,您可以通过使用DOM的完整性来获得SAX的内存效率。
这是一个不完整的API;当我使用它时,我不得不修改它以使其完全可用,但它作为基础。我不再使用它了,所以我不记得我必须添加什么;只是提前警告。
这很慢。
XML是处理大型数据集的非常差的格式。如果您对源数据有任何控制权,并且对数据集合有意义,那么将数据拆分为可以完全分析到内存中的较小块,会更好。
另一种选择是使用SAX API,但他们非常痛苦地直接做任何不平凡的事情。
检查出iterparse()
函数。关于如何使用它来分析非常大的文档的描述可以在here找到。
iterparse()函数将解决您的问题,我最近通过iterparse帮助我最近解析了一个1GB xml文档。 – 2012-10-03 01:40:37
非常感谢。 – zhangwf 2010-09-15 07:45:50