从中使用parseString分析XML文件xml.dom.minidom效率低下?

2024-05-23 21:30:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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个月的时间!在

我想我写了一些效率低下的代码。谁能帮我改进一下吗?在

非常感谢。在


Tags: 文件maketagxmlkeywordmembertag2tag3
1条回答
网友
1楼 · 发布于 2024-05-23 21:30:57

对于这种大小的文件,正确的方法是流式解析器(SAX样式,而不是DOM样式,因此minidom是完全不合适的)。请参阅this answer以节省内存的方式使用lxml.iterparse(一种最新的/现代流式解析器,它使用libxml2,一种在后端用C编写的快速高效的XML解析库),或者the article on which that answer is based。在

一般来说,当您看到与成员相关联的元素时,您应该在内存中构建该成员,当您看到与标记结尾相关联的事件时,您将发出或处理已构建的内存内容并开始新的内容。在

相关问题 更多 >