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

Thi*_*ode 5 python xml split

我有Python代码来解析XML文件,详见此处.我知道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>
Run Code Online (Sandbox Code Playgroud)

如何为每1000本书元素创建包含标题数据的新X​​ML文件?有关代码和数据集的具体示例,请参阅我的其他问题.非常感谢.

我想要做的就是避免一次性内存加载数据集.我们可以流式解析XML文件吗?我在思考正确的方向吗?

ps:我的情况类似于2009年提出问题.一旦找到解决问题的简单方法,我会在这里发布答案.感谢您的反馈.

jfs*_*jfs 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()
Run Code Online (Sandbox Code Playgroud)