python - 如何在 python 中将 xml 文件转换为 csv 输出?

标签 python python-3.x xml csv

我有一个基本的 XML 文件,该文件是从我无法控制的数据库中提取的。

<?xml version="1.0" encoding="utf-8"?>
<data>
<Job1Start><Time>20200202055415725</Time></Job1Start>
<Job1End><Time>20200202055423951</Time></Job1End>
<Job2Start><Time>20200202055810390</Time></Job2Start>
<Job3Start><Time>20200202055814687</Time></Job3Start>
<Job2End><Time>20200202055819000</Time></Job2End>
<Job3End><Time>20200202055816708</Time></Job3End>
</data>

我希望在 CSV 文件中获得以下输出:

Task    Start               Finish
Job1    20200202055415725   20200202055423951
Job2    20200202055810390   20200202055819000
Job3    20200202055814687   20200202055816708

我尝试了几种方法,下面的方法似乎是我得到的最接近正确输出的方法,但即使这样也无法正常工作:

import xml.etree.ElementTree as ET
import csv

tree = ET.parse('Jobs.xml')
root = tree.getroot()

with open('Output.csv', 'w') as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        for TaskName in root.findall('Job1Start'):
            starttime = TaskName.find('Time').text
            task = "Job1"
            writer.writerows(zip(task, starttime))
            print("Job1", starttime)

我从中得到的输出如下所示。它的格式不正确,我只能搜索 Job1 的开始时间:

Output CSV

有人遇到过类似的问题吗?

最佳答案

writerows 而不是 writerow 会导致单字符问题和 csv.writer。 writerows 需要一个列表的列表(或更准确地说是可迭代的可迭代),并且字符串是可迭代的,因此字符串列表满足要求,但内部的“列表”项是单个字符。 p>

csv.writer 还需要每个文档的 newline='',并且在 Windows 上,缺少此参数会在打开 CSV 时显示为行之间的额外空白行在 Excel 中。

解决方案如下:

import xml.etree.ElementTree as ET
import csv

tree = ET.parse('Jobs.xml')
root = tree.getroot()

# Use newline='' per csv docs.  This fixes the blanks lines in your output
with open('Output.csv', 'w', newline='') as csv_file:
        writer = csv.writer(csv_file)
        writer.writerow('Task Start Finish'.split())
        for job in range(1,4):
            start = root.find(f'Job{job}Start/Time').text
            end = root.find(f'Job{job}End/Time').text
            # Use writerow not writerows...latter expects list of lists.
            writer.writerow([f'Job{job}',start,end])

输出:

Task,Start,Finish
Job1,20200202055415725,20200202055423951
Job2,20200202055810390,20200202055819000
Job3,20200202055814687,20200202055816708

关于python - 如何在 python 中将 xml 文件转换为 csv 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60043913/

相关文章:

Python:如何从 xlsx 文件中抓取数据的语法?

python - 如何检查路径在 python 中是否有粘性位?

xml - 使用 xslt 删除重复节点 XML - 多条记录(xslt 2 或 3)

python-3.x - Telethon 中有没有办法从聊天中获取消息以及发件人姓名、日期和时间?

xml - xsl :sort does not work together with xsl:choose or if

xml - 命名空间检查是基于 xml 字符串还是基于 URI?

python - 将 Google OAuth2 与 Flask 一起使用

java - 如何创建包含 Java 类层次结构的字典(在 Python 中)?

python - reshape 数据框并对每行应用计算

python - 如何限制python函数的参数必须是字符串或lambda表达式之类的函数