gpt4 book ai didi

python - 使用 lxml 和 iterparse() 解析一个大的 (+- 1Gb) XML 文件

转载 作者:太空狗 更新时间:2023-10-29 17:09:45 25 4
gpt4 key购买 nike

我必须解析一个 1Gb 的 XML 文件,其结构如下所示,并提取标签“作者”和“内容”中的文本:

<Database>
<BlogPost>
<Date>MM/DD/YY</Date>
<Author>Last Name, Name</Author>
<Content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dictum dictum vehicula.</Content>
</BlogPost>

<BlogPost>
<Date>MM/DD/YY</Date>
<Author>Last Name, Name</Author>
<Content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dictum dictum vehicula.</Content>
</BlogPost>

[...]

<BlogPost>
<Date>MM/DD/YY</Date>
<Author>Last Name, Name</Author>
<Content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dictum dictum vehicula.</Content>
</BlogPost>
</Database>

到目前为止,我已经尝试了两件事:i) 读取整个文件并使用 .find(xmltag) 遍历它和 ii) 使用 lxml 和 iterparse() 解析 xml 文件。第一个选项我已经可以使用了,但是速度很慢。第二个选项我还没有成功。

这是我的一部分:

for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
if element.tag == "BlogPost":
print element.text
else:
print 'Finished'

结果只有空格,其中没有文本。

我一定做错了什么,但我无法理解。另外,如果它不够明显,我对 python 很陌生,这是我第一次使用 lxml。请帮忙!

最佳答案

for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
for child in element:
print(child.tag, child.text)
element.clear()

最后的清除会阻止你使用过多的内存。

[update:] 获取“...之间的所有内容作为字符串”我猜你想要其中之一:

for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
print(etree.tostring(element))
element.clear()

for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
print(''.join([etree.tostring(child) for child in element]))
element.clear()

或者甚至:

for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
print(''.join([child.text for child in element]))
element.clear()

关于python - 使用 lxml 和 iterparse() 解析一个大的 (+- 1Gb) XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856163/

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