python - 如何解析多个xml文件并将属性传递给csv?

标签 python xml python-3.x csv

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

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

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()

最佳答案

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

  • 首先枚举目录下的所有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()

关于python - 如何解析多个xml文件并将属性传递给csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57591754/

相关文章:

python-3.x - 尝试使用 Keras 中的 model.predict() 时尺寸错误

python - 如何在python-MySQL中通过索引传递字典键列表?

python - 打开 Spyder 时不打开 IPython 控制台

android - 在只有 2 列的 TableRow 中设置 3 个 TextView - Android

xml - 如何在 XPath 中的所有路径元素上指定条件?

python - 屏幕截图python 3.6.6 opencv和枕头不起作用

python - 我将如何在 python 中制作自定义错误消息

php - 如何使用python/PHP去除URL链接中的冗余?

python - 计算多列python中的字符串实例

c++ - 使用 Lua 从 C++ 修改 XML 字符串