【发布时间】:2019-07-27 19:37:08
【问题描述】:
我是新来的,我一直在尝试创建一个小的 python 脚本来将 xml 转换为 csv。根据我在 Stackoverflow 中阅读的各种帖子,我设法提出了一个可以正常工作的示例代码。但是我尝试使用的数据有多个层次,因此我不确定如何在叶子上提取数据级别。
下面是数据的样子:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transmission>
<TransmissionBody>
<level1>
<level2>
<level3>
<level4>
<level5>
<level6>
<ColA>ABC</ColA>
<ColB>123</ColB>
</level6>
</level5>
</level4>
</level3>
</level2>
</level1>
</TransmissionBody>
</Transmission>
我正在尝试使用下面的代码来尝试将 xml 转换为 csv
import pandas as pd
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
final = {}
for elem in root:
if len(elem):
for c in elem.getchildren():
final[c.tag] = c.text
else:
final[elem.tag] = elem.text
df = pd.DataFrame([final])
df.to_csv('file.csv)
然而,此代码只是从 level2 中提取 level2 而不是从 level6 中提取 ColA。
预期输出:
Transmission,TransmissionBody,level1,level2,level3,level4,level5,level6,ColA,ColB
,,,,,,,,ABC,123
,,,,,,,,DEF,456
更新代码:
allFiles = glob.glob(folder)
for file in allFiles:
xmllist = [file]
for xmlfile in xmllist:
tree = ET.parse(xmlfile)
root = tree.getroot()
def f(elem, result):
result[elem.tag] = elem.text
cs = elem.getchildren()
for c in cs:
result = f(c, result)
return result
d = f(root, {})
df = pd.DataFrame(d, index=['values'])
【问题讨论】:
标签: python xml pandas export-to-csv