我有一个xml文件,如图所示。
<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
<Data>
<Data>
<Data>
<child>
....text....
</child>
</Data>
<Data>
<Data>
<Data>
<Data>
.
.
.
</DataRoot>
我的要求是将此xml拆分为每个文件中具有固定数量<Data>
元素的较小xml文件。
我可以在每个<Data>
拆分为xml,但无法使用固定数量的<Data>
元素并形成文件。
我的输出是: 文件1:
<DataRoot>
<Data>
</DataRoot>
file2的:
<DataRoot>
<Data>
</DataRoot>
但必需的输出是:
文件1:
<DataRoot>
<Data>
<Data>
<Data>
</DataRoot>
file2的:
<DataRoot>
<Data>
<Data>
<Data>
</DataRoot>
这是我的代码。
import os
import xml.etree.ElementTree as ET
import lxml.etree as LT
file_path = 'filepath\\file.xml'
file_name = (os.path.splitext((os.path.basename("%s"%file_path)))[0])
print file_name
tree = ET.ElementTree(file='%s'%file_path)
tre = LT.ElementTree(file='%s'%file_path)
root = tree.getroot().tag
i = 0
for elm in (tree.findall('Data')):
text = ET.tostring(elm)
i += 1
filename = "%d"%i+"_of_%s"%file_name+".xml"
with open(filepath\\%s'%filename, 'wb') as f:
f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
f.write(("<"+ "%s"%root+">"))
f.write(text)
f.write(("</"+ "%s"%root+">"))
f.close()
要形成的文件数量不是两个,它取决于源xml文档的大小,在解释中我给出了随机计数为2。 提前致谢
答案 0 :(得分:0)
只需添加一个计数器并检查何时转到下一个文件:
i = 0
per_file = 5 # number of data per xml-file
file_counter = 1
filename = "%d"%file_counter+"_of_%s"%file_name+".xml"
f = open('C:\\Users\\kmjn026\\Desktop\\Data_MLT\\%s'%filename, 'wb')
for elm in (tree.findall('Document')):
text = ET.tostring(elm)
if i % per_file == 0 and i > 0:
file_counter += 1
f.write(("</"+ "%s"%root+">"))
f.close()
filename = "%d"%file_counter+"_of_%s"%file_name+".xml"
f = open('C:\\Users\\kmjn026\\Desktop\\Data_MLT\\%s'%filename, 'wb')
f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
f.write(("<"+ "%s"%root+">"))
f.write(text)
i += 1
f.write(("</"+ "%s"%root+">"))
f.close()