如何在Python中以简单的方式拆分XML文件?

2024-06-15 02:17:51 发布

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

我有用于将XML文件解析为detailed here的Python代码。我知道XML文件在内存中操作时占用系统资源是臭名昭著的。我的解决方案适用于较小的XML文件(比如200KB,我有一个340MB的文件)。

我开始研究StAX(pull parser)实现,但我的工作日程很紧,我正在寻找一种更简单的方法来完成这项任务。

我了解如何创建较小的文件块,但如何通过每次输出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个book元素创建带有头数据的新XML文件?有关代码和数据集的具体示例,请参阅我的其他question here。谢谢。

我要做的就是避免一次在内存中加载数据集。我们能以流方式解析XML文件吗?我的思路对吗?

注:我的情况类似于2009年的a question asked。一旦我找到一个更简单的解决方法,我会在这里发布一个答案。感谢您的反馈。


Tags: 文件数据方法内存代码id元素here
2条回答

你可以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()

您可以使用elementtree.iterparse并在处理完每个book标记后丢弃它。

相关问题 更多 >