python - Python - 使用 Python pandas 将 xml 转换为 csv
问题描述
我是新来的,我一直在尝试创建一个小的 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)
然而,这段代码只是从 level6 中提取 level2 而不是 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'])
解决方案
你有一个缩进问题
if len(elem):
我想这应该可以解决它。
推荐阅读
- azure-devops - 将发布管道导入另一个项目时出现错误“无法读取未定义的每个属性”
- r - 如何使用 purrr 嵌套数据对特定行进行计算
- reactjs - 如何在不更新的情况下为 React 中的兄弟组件设置状态
- c++ - 在 C++11 和 C++14 中是否有使用字符指针数组定义的 constexpr 的替代方法?
- python - 如何为 pymysql lambda 启用 AWS XRAY 跟踪
- r - md_document 或 github_document 中的编号目录
- c# - 我想通过在代码中静态提供数组来从省份下拉列表中选择省份来填充城市下拉列表
- sublimetext3 - 如何让 Sublime Text 在一个窗口中打开多个文件?
- c# - 如何在 Visual Studio 中创建配置文件并使用 system.configuration dll?
- java - 在 for 循环中查找数字的差异