【问题标题】:Convert XML to CSV file将 XML 转换为 CSV 文件
【发布时间】:2015-10-28 22:47:24
【问题描述】:

我有一个这样的 XML 文件:

<hierachy>
    <att>
        <Order>1</Order>
        <attval>Data</attval>
        <children>
            <att>
                <Order>1</Order>
                <attval>Studyval</attval>
            </att>
            <att>
                <Order>2</Order>
                <attval>Site</attval>
            </att>
        </children>
    </att>
    <att>
        <Order>2</Order>
        <attval>Info</attval>
        <children>
            <att>
                <Order>1</Order>
                <attval>age</attval>
            </att>
            <att>
                <Order>2</Order>
                <attval>gender</attval>
            </att>
        </children>
    </att>
</hierachy>

我正在尝试将其转换为这样的 CSV 文件:

Data,Studyval
Date,Site
Info,age
Info,gender

我的问题是,父名和子名都相同 - 'att''attval'。我如何告诉 Python 区分它们并给我输出?

我试过了:

import xml.etree.cElementTree as ET

tree = ET.parse('input.xml')
rebase = tree.getroot()

list = []

for att in rebase.findall('att'):
        name = att.find('attval').text
        for each_att in att.findall('attval'):
            try:
                val = att.find('attval').text
                print name, val
            except AttributeError:
                print name

它打印了两次相同的东西。

【问题讨论】:

    标签: python xml csv xpath elementtree


    【解决方案1】:

    不要使用findall 函数,因为它会在整个树中查找 att 标签。只需按从上到下的顺序迭代树并抓取其中的相关元素。

    from xml.etree import ElementTree
    tree = ElementTree.parse('input.xml')
    root = tree.getroot()
    
    for att in root:
        first = att.find('attval').text
        for subatt in att.find('children'):
            second = subatt.find('attval').text
            print('{},{}'.format(first, second))
    

    这给出了:

    $ python process.py 
    Data,Studyval
    Data,Site
    Info,age
    Info,gender
    

    【讨论】:

    • 太完美了!非常感谢!
    猜你喜欢
    • 2011-03-05
    • 2014-11-22
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多