如何用Python简单地拆分XML文件?
我有一段Python代码,用来解析XML文件,具体内容可以在这里查看。我知道,XML文件在内存中处理时会占用很多系统资源。我的解决方案在处理较小的XML文件时效果不错(比如200KB),但我现在有一个340MB的文件。
我开始研究StAX(拉取解析器)的实现,但时间紧迫,我想找一个更简单的方法来完成这个任务。
我明白如何将文件分成更小的块,但我该如何提取正确的元素呢?每次都输出主标签或头标签该怎么做?
比如,这就是文件的结构:
<?xml version="1.0" ?>
<!--Sample XML Document-->
<bookstore>
<book Id="1">
....
....
</book>
<book Id="2">
....
....
</book>
<book Id="3">
....
....
</book>
....
....
....
<book Id="n">
....
....
</book>
</bookstore>
我该如何为每1000个书籍元素创建新的XML文件,并包含头部数据?如果想看具体的代码和数据集,可以参考我在这里的另一个问题。非常感谢。
我只想避免一次性将整个数据集加载到内存中。我们能以流式的方式解析XML文件吗?我这样想对吗?
附注:我的情况类似于2009年提出的一个问题。一旦我找到更简单的解决方案,我会在这里发布答案。感谢你的反馈。
2 个回答
1
你可以使用 elementtree.iterparse 这个工具,每处理完一个书籍标签后就把它丢掉。
8
你可以逐步解析你的大XML文件:
from xml.etree.cElementTree import iterparse
# get an iterable and turn it into an iterator
context = iter(iterparse("path/to/big.xml", events=("start", "end")))
# get the root element
event, root = next(context)
assert event == "start"
for event, elem in context:
if event == "end" and elem.tag == "book":
# ... process book elements ...
root.clear()