【问题标题】:How to parse multiple xml files and pass through attributes into csv?如何解析多个xml文件并将属性传递给csv?
【发布时间】:2019-12-26 17:45:53
【问题描述】:

我需要将一个 xml 文件目录解析为一个大的 csv 文件,我需要元素“Param”下的某些属性(属性是“Name”和“PNum”)。在名为 Content.xml 的目录中有另一个 XML 文件,我可以获取其他 XML 文件的所有名称并将它们设置为 FileName。问题是我无法弄清楚如何在每个 XML 文件中获取这些属性,因为每个 XML 文件都有不同的组织,有些似乎一开始就没有这些属性。

我编写的代码适用于目录中的一个 XML 文件,该文件输出包含所有相关信息的 CSV 文件。

import xml.etree.ElementTree as ET
import csv
import os

FileName = '------.xml'
tree = ET.parse(FileName)
root = tree.getroot()[4]

csv_out = open('CsvOut', 'w')

csvwriter = csv.writer(csv_out)

count = 0
for child in root:
    generation = []
    parameters = []
    if count == 0:
        csv_head = ['Generation', 'Parameter Name', 'Parameter Number']
        csvwriter.writerow(csv_head)
        count = count + 1

    gen = FileName[:-4]
    generation.append(gen)
    parameters.append(generation)
    name = child.get('Name')
    parameters.append(name)
    num = child.get('PNum')
    parameters.append(num)
    csvwriter.writerow(parameters)



csv_out.close()

【问题讨论】:

    标签: python xml python-3.x csv


    【解决方案1】:

    我比较简单,你可以分两步完成:

    • 首先,枚举目录下的所有xml文件
    • 对这些文件执行代码
    import xml.etree.ElementTree as ET
    import csv
    import os
    from glob import glob
    
    # create csv writer
    csv_out = open('CsvOut', 'w')
    csvwriter = csv.writer(csv_out)
    # write the header
    csv_head = ['Generation', 'Parameter Name', 'Parameter Number']
    csvwriter.writerow(csv_head)
    
    # iterate over the xml files in the current directory
    for FileName in glob("*.xml"):
        tree = ET.parse(FileName)
        root = tree.getroot()[4]
        for child in root:
            generation = []
            parameters = []
    
            gen = FileName[:-4]
            generation.append(gen)
            parameters.append(generation)
            name = child.get('Name')
            parameters.append(name)
            num = child.get('PNum')
            parameters.append(num)
            csvwriter.writerow(parameters)
    
    # after iterating, close the csv file
    csv_out.close()
    

    【讨论】:

    • 谢谢,在您回答之前设法弄明白了,但希望这有助于解决其他有同样问题的人
    猜你喜欢
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2020-01-09
    • 1970-01-01
    相关资源
    最近更新 更多