【发布时间】:2018-06-22 23:49:48
【问题描述】:
我有一个大型 xml 文件,其父标签有 97k 个子标签。我想分成 10 个文件,每个文件有 10k 个标签,最后一个带有剩余的标签。
我有这段代码用于向每个文件写入一个子标签,但无法提出组。
假设我的示例 xml 有 10 个子标签,我想创建 5 个文件,每个文件有 2 个子标签。
我的示例 xml:
<root>
<row>
<NAME>A</NAME>
<FIRSTNAME>A</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>B</NAME>
<FIRSTNAME>B</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>A</NAME>
<FIRSTNAME>A</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>B</NAME>
<FIRSTNAME>B</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>A</NAME>
<FIRSTNAME>A</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>B</NAME>
<FIRSTNAME>B</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>A</NAME>
<FIRSTNAME>A</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>B</NAME>
<FIRSTNAME>B</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>A</NAME>
<FIRSTNAME>A</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>B</NAME>
<FIRSTNAME>B</FIRSTNAME>
<GENDER>M</GENDER>
</row>
</root>
我的结果应该是 5 个文件,每个文件有 2 个条目,如下所示:
<root>
<row>
<NAME>A</NAME>
<FIRSTNAME>A</FIRSTNAME>
<GENDER>M</GENDER>
</row>
<row>
<NAME>B</NAME>
<FIRSTNAME>B</FIRSTNAME>
<GENDER>M</GENDER>
</row>
</root>
下面的代码为每个文件放置了每个子标签,但我希望在这里例如每个文件有 2 个标签。
import xml.etree.ElementTree as ET
context = ET.iterparse('file.xml', events=('end', ))
index = 0
for event, elem in context:
if elem.tag == 'row':
index += 1
filename = format(str(index) + ".xml")
with open(filename, 'wb') as f:
f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
f.write(ET.tostring(elem))
提前致谢!
编辑以添加食谱:
from itertools import zip_longest
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
【问题讨论】:
标签: python xml-parsing elementtree