【问题标题】:xml file to csv file python scriptxml文件到csv文件python脚本
【发布时间】:2017-08-19 10:43:17
【问题描述】:

我需要一个 python 脚本来从 xml 文件中提取数据

我有一个 xml 文件,如下所示:

<software>
    <name>Update Image</name>
    <Build>22.02</Build>
    <description>Firmware for Delta-M Series </description>
    <CommonImages>  </CommonImages>
<ModelBasedImages>
    <ULT>
        <CNTRL_0>
             <file type="UI_APP" ver="2.35" crc="1234"/>
             <file type="MainFW" ver="5.01" crc="5678"/>
             <SIZE300>
                <file type="ParamTableDB" ver="1.1.4" crc="9101"/>
             </SIZE300>
        </CNTRL_0>
        <CNTRL_2>
            <file type="UI_APP" ver="2.35" crc="1234"/>
            <file type="MainFW" ver="5.01" crc="9158"/>
        </CNTRL_2>  
    </ULT>
</ModelBasedImages>
</software>

我想要表格格式的数据,例如:

输入ver crc
UI_APP 2.35 1234
主固件 5.01 5678
参数表数据库 1.1.4 9101
UI_APP 2.35 1234
主固件 5.01 9158

解压成任何类型的文件 csv/doc....

我试过这段代码:

import xml.etree.ElementTree as ET
import csv

tree = ET.parse("Build_40.01 (copy).xml")
root = tree.getroot()

# open a file for writing

Resident_data = open('ResidentData.csv', 'w')

# create the csv writer object

csvwriter = csv.writer(Resident_data)
resident_head = []

count = 0
for member in root.findall('file'):
    resident = []
    address_list = []
    if count == 0:
        name = member.find('type').tag
        resident_head.append(name)
        ver = member.find('ver').tag
        resident_head.append(ver)
        crc = member.find('crc').tag
        resident_head.append(crc)

        csvwriter.writerow(resident_head)
        count = count + 1

    name = member.find('type').text
    resident.append(name)
    ver = member.find('ver').text
    resident.append(ver)
    crc = member.find('crc').text
    resident.append(crc)

    csvwriter.writerow(resident)
Resident_data.close()

提前致谢 已编辑:xml 代码已更新。

【问题讨论】:

  • 你试过什么?除非您提及您为解决问题所做的一些努力,否则问题是题外话。
  • xml.etree.ElementTree.ParseError: mismatched tag: line 13 用于&lt;SIZE300&gt; 标签。也许使用bs4
  • 那不是有效的 xml。
  • 它是一个类型错误,有“”。考虑一下并帮助我
  • @SanjeevKumar:如果是错字,请编辑问题以更正无效数据,以免其他人也被误导。

标签: python xml csv doc


【解决方案1】:

使用xpath 表达式.//file 查找XML 文档中的所有&lt;file&gt; 元素,然后使用每个元素的属性通过csv.DictWriter 填充CSV 文件:

import csv
import xml.etree.ElementTree as ET

tree = ET.parse("Build_40.01 (copy).xml")
root = tree.getroot()

with open('ResidentData.csv', 'w') as f:
    w = csv.DictWriter(f, fieldnames=('type', 'ver', 'crc'))
    w.writerheader()
    w.writerows(e.attrib for e in root.findall('.//file'))

对于您的示例输入,输出 CSV 文件将如下所示:

类型,版本,CRC UI_APP,2.35,1234 主FW,5.01,5678 参数表数据库,1.1.4,9101 UI_APP,2.35,1234 主FW,5.01,9158

它使用 CSV 文件的默认分隔符(逗号)。您可以使用delimiter=' ' 选项将分隔符更改为DictWriter(),但是,您将无法获得与示例输出相同的格式,这似乎使用固定宽度字段(但您可能会使用制表符作为分隔符)。

【讨论】:

    猜你喜欢
    • 2013-09-15
    • 2016-12-30
    • 2022-12-17
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多