首页 > 解决方案 > 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'])

标签: pythonxmlpandasexport-to-csv

解决方案


你有一个缩进问题

if len(elem):

我想这应该可以解决它。


推荐阅读