gpt4 book ai didi

python - 在 Python 中按 block 处理 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:06:28 24 4
gpt4 key购买 nike

我要处理一系列大型 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 看到的代码):

#Added this in the edit.
import xml.etree.ElementTree as ET

tree = ET.iterparse(xml_file)
tree = iter(tree)
event, root = tree.next()

for event, elem in tree:
#Need to find the <DOC> elements
if event == "end" and elem.tag == "DOC":
#Code to process the fields within the <DOC> element.
#The code here mainly just iterates through the inner
#elements and extracts what I need
root.clear()

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

编辑:

删除之前的编辑,因为它是错误的。

最佳答案

我认为如果您切换到 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]

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

关于python - 在 Python 中按 block 处理 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com