我试图解析一个大型文件(> 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
- 1. Python ElementTree XML解析
- 2. 解析与Python非常大的HTML文件(ElementTree的?)
- 3. 使用ElementTree解析XML Python
- 4. 使用ElementTree解析XML -python
- 5. SAX解析器为一个非常巨大的XML文件
- 6. Python ElementTree多解析XML解析
- 7. 使用ElementTree解析XML文件
- 8. 使用ElementTree解析任意XML文件
- 9. 与解析XML ElementTree的Python中
- 10. 解析XML使用Python的ElementTree
- 11. 使用ElementTree库解析XML
- 12. 解析XML使用ElementTree的
- 13. java android非常大的xml解析
- 14. 解析一个xml文件
- 15. 解析非XML文件中的XML块
- 16. 使用python和ElementTree解析XML
- 17. 解析XML文件中获取UnicodeEncodeError(ElementTree的)/ ValueError异常(LXML)
- 18. 在java和python中解析非常大的bz2 xml文件(逐个元素)
- 19. Python json解析非常大的文件
- 20. nodejs elementtree npm xml解析
- 21. 使用ElementTree解析XML
- 22. 在Python中使用ElementTree解析特定网址的xml文件
- 23. 使用python解析未知元素的xml文件ElementTree
- 24. 使用ElementTree XML API解析URL XML
- 25. 解析非常大的XML文档(多一点)在Java中
- 26. 解析非常大的XML文件,并编组为Java对象
- 27. 解析,处理和使用非常大的XML文件
- 28. 用XmlSlurper解析(非常)大型的XML文件
- 29. 如何解析C#中非常庞大的XML文件?
- 30. Python ElementTree支持解析未知的XML实体吗?
非常感谢。 – zhangwf 2010-09-15 07:45:50