我试图用python2.7解析一个XML文件。XML文件的大小为370+MB,包含6541000行。在
XML文件由以下300K块组成:
<Tag:Member>
<fileID id = '123456789'>
<miscTag> 123 </miscTag>
<miscTag2> 456 </miscTag2>
<DateTag> 2008-02-02 </DateTag>
<Tag2:descriptiveTerm>Keyword_1</Tag2:descriptiveTerm>
<miscTag3>6.330016</miscTag3>
<historyTag>
<DateTag>2001-04-16</DateTag>
<reasonTag>Refresh</reasonTag>
</historyTag>
<Tag3:make>Keyword_2</Tag3:make>
<miscTag4>
<miscTag5>
<Tag4:coordinates>6.090,6.000 5.490,4.300 6.090,6.000 </Tag4:coordinates>
</miscTag5>
</miscTag4>
</Tag:Member>
我使用了以下代码:
^{pr2}$所以,我运行这个程序,发现它需要大约27GB的内存,解析上面的每个块需要20秒以上。所以解析这个文件需要2个月的时间!在
我想我写了一些效率低下的代码。谁能帮我改进一下吗?在
非常感谢。在
对于这种大小的文件,正确的方法是流式解析器(SAX样式,而不是DOM样式,因此minidom是完全不合适的)。请参阅this answer以节省内存的方式使用
lxml.iterparse
(一种最新的/现代流式解析器,它使用libxml2,一种在后端用C编写的快速高效的XML解析库),或者the article on which that answer is based。在一般来说,当您看到与成员相关联的元素时,您应该在内存中构建该成员,当您看到与标记结尾相关联的事件时,您将发出或处理已构建的内存内容并开始新的内容。在
相关问题 更多 >
编程相关推荐