Python 将 xml 文件转换为 csv

斯蒂芬妮

我有一个目录,其中包含多个 xml 文件,我希望能够将这些文件一一处理,并将它们导出为 CSV 文件。单独来看,它与以下脚本完美配合:

import xml.etree.ElementTree as ET
import csv
tree = ET.parse('D:/scripts/xml/download_xml_1.xml')
data_out = open('D:/scripts/csv/output_1.csv', 'w',newline='', errors='ignore')
csvwriter = csv.writer(data_out)
col_names = ['Fichier','No. de document','Titre']
csvwriter.writerow(col_names)
root = tree.getroot()

for elem in root.iter(tag='Document'):
        row = []
        filetype = elem.find('FileType').text
        row.append(filetype)
        documentnumber = elem.find('DocumentNumber').text
        row.append(documentnumber)
        title = elem.find('Title').text
        row.append(title)
        csvwriter.writerow(row)
data_out.close()

但是我会疯狂地找到解决方案,一个接一个,这是我目前所处的位置:

import xml.etree.ElementTree as ET
import csv
import os
for my_files in os.listdir('D:/scripts/xml/'):
    tree = ET.parse(my_files)
    data_out = open('D:/scripts/csv/'+ my_files[:-4] +'.csv', 'w',newline='', errors='ignore')
    csvwriter = csv.writer(data_out)
    col_names = ['Fichier','No. de document','Titre']
    csvwriter.writerow(col_names)
    root = tree.getroot()
    for elem in root.iter(tag='Document'):
        row = []
        filetype = elem.find('FileType').text
        row.append(filetype)
        documentnumber = elem.find('DocumentNumber').text
        row.append(documentnumber)
        title = elem.find('Title').text
        row.append(title)
        csvwriter.writerow(row)
data_out.close()

任何帮助将不胜感激。

完美的

只需在接收文件名作为输入的已定义方法中概括您的过程。然后,迭代地将文件名传递给它。此外,考虑with上下文管理器打开文本连接而无需close.

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

xml_path = r'D:\scripts\xml'
csv_path = r'D:\scripts\csv'

# DEFINED METHOD
def xml_to_csv(xml_file):
    csv_file = os.path.join(csv_path, f'Output_{xml_file[:-4]}.csv')
    tree = ET.parse(os.path.join(xml_path, xml_file))

    with open(csv_file, 'w', newline='', errors='ignore') as data_out:
        csvwriter = csv.writer(data_out)
        col_names = ['Fichier', 'No. de document', 'Titre']
        csvwriter.writerow(col_names)
    
        root = tree.getroot()
        for elem in root.iter(tag='Document'):
            row = [elem.find('FileType').text,
                   elem.find('DocumentNumber').text,
                   elem.find('Title').text]
            csvwriter.writerow(row)

# FILE ITERATION
for f in os.listdir(xml_path):
    xml_to_csv(f)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章