我有用于将XML文件解析为detailed here的Python代码。我知道XML文件因在内存中操作时占用系统资源而臭名昭着。我的解决方案适用于较小的XML文件(比如200KB,我有一个340MB的文件)。
我开始研究StAX(拉解析器)实现,但我的运行时间紧迫,我正在寻找一种更简单的方法来完成这项任务。
我理解创建较小的文件块但是如何通过每次输出main / header标签来提取正确的元素?
例如,这是架构:
<?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文件?有关代码和数据集的具体示例,请参阅我的其他question here。非常感谢。
我想要做的就是一次性避免内存中加载数据集。我们可以流式解析XML文件吗?我在思考正确的方向吗?
p.s:我的情况类似于2009年的question asked。一旦找到解决问题的简单解决方案,我会在这里发布答案。感谢您的反馈。
答案 0 :(得分:8)
你可以parse your big XML file incrementally:
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()
答案 1 :(得分:2)
您可以使用elementtree.iterparse并在处理完每个书签之后将其丢弃。