用Python分块处理XML

2024-07-06 21:57:24 发布

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

我有一系列大的XML文件(每个大约3GB),我正试图处理这些文件。XML的大致格式是

<FILE>
<DOC>
    <FIELD1>
        Some text.
    </FIELD1>
    <FIELD2>
        Some text. Probably some more fields nested within this one.
    </FIELD2>
    <FIELD3>
        Some text.
    </FIELD3>
    <FIELD4>
        Some text. Etc.
    </FIELD4>
</DOC>
<DOC>
    <FIELD1>
        Some text.
    </FIELD1>
    <FIELD2>
        Some text. Probably some more fields nested within this one.
    </FIELD2>
    <FIELD3>
        Some text.
    </FIELD3>
    <FIELD4>
        Some text. Etc.
    </FIELD4>
</DOC>
</FILE>

我目前的方法是(模仿http://effbot.org/zone/element-iterparse.htm#incremental-parsing上看到的代码):

^{pr2}$

不过,这会爆炸,并占用我所有的系统内存(16GB)。一开始我以为是root.clear()的位置,所以我试着把它移到if语句之后,但似乎没有任何效果。鉴于此,我很确定除了“获得更多内存”之外,如何继续

编辑

删除了以前的编辑,因为它是错误的。在


Tags: 文件textfieldsdocmoresomexmlfile
1条回答
网友
1楼 · 发布于 2024-07-06 21:57:24

如果您切换到lxml并这样做来清除树,那么您可以使用已经编写的代码。。。在

from lxml import etree
context = etree.iterparse(xmlfile)  # can also limit to certain events and tags
for event, elem in context:
    # do some stuff here with elem
    elem.clear()
    while elem.getprevious() is not None:
        del elem.getparent()[0]

我不是说这是有效的,但它可能会完成工作。在

相关问题 更多 >