我試圖解析一個大型文件(> 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