为了账号安全,请及时绑定邮箱和手机立即绑定

PYTHON解析位于目录中的多个文件XML并将数据上传到CSV文件中

PYTHON解析位于目录中的多个文件XML并将数据上传到CSV文件中

撒科打诨 2021-12-09 18:15:02
我有一个问题,我应该从多个 XML 文件中提取数据并将它们上传到 CSV ...当涉及到单个 XML 文件时,我可以以 CSV 格式提取和加载数据,但是当它是 XML 文件的目录时,我只能看到名称,但当参数通过时什么也不会发生。我附上代码,请帮助我。import csv import xml.etree.ElementTree as ETimport ospath = r"C:\\Users\ADMIN\Desktop\prog"string = []for filename in os.listdir(path):    if not filename.endswith('.xml'):continue    fullname=os.path.join(path,filename)    print(fullname)    string.append(fullname)tree= ET.parse(fullname)root = tree.getroot()csvfile=open('prova.csv','w')csv_writer = csv.writer(csvfile)PrimoFor=[]SecondoFor=[] TerzoFor=[]QuartoFor=[]print("Dati Riepilogo per aliquota IVA e natura")for datir in root.iter('DatiRiepilogo'):        for element in datir:            print(element.tag,element.text)            PrimoFor.append(element.text)for CedentePrestatore in root.iter('CedentePrestatore'):    for TagFiglioCedentePrestatore in CedentePrestatore:            for TagNipoteCedentePrestatore in TagFiglioCedentePrestatore:                for ProNipoteCedentePrestatore in TagNipoteCedentePrestatore:                    print(ProNipoteCedentePrestatore.tag,ProNipoteCedentePrestatore.text)                    PrimoFor.append(ProNipoteCedentePrestatore.text)for DatiGeneraliDocumento in root.iter('DatiGeneraliDocumento'):    for FiglioDatiGeneraliDocumento in DatiGeneraliDocumento:        if(FiglioDatiGeneraliDocumento.tag!='Divisa'):            print(FiglioDatiGeneraliDocumento.tag,FiglioDatiGeneraliDocumento.text)            PrimoFor.append(FiglioDatiGeneraliDocumento.text)我也试过这个功能,但它没有改变任何东西for path , dirs, files in os.walk(path):    for filename in files:        print(filename)        string.append(filename)提前致谢。抱歉语言是谷歌翻译
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

试试下面的代码。正如您所说,您希望为目录中的所有 XML 文件重复读取 XML 文件。缺少的是重复读取每个文件。我进一步假设结果应该写入同一个 CSV 文件。此外,我重命名了包含文件名列表的变量。这不是绝对必要的,但最好避免将变量命名为与关键字相同的名称。


import csv 

import xml.etree.ElementTree as ET

import os



path = r"C:\\Users\ADMIN\Desktop\prog"

filenames = []


for filename in os.listdir(path):

    if not filename.endswith('.xml'):

        continue

    fullname = os.path.join(path,filename)

    print(fullname)

    filenames.append(fullname)


csvfile = open('prova.csv','w')

csv_writer = csv.writer(csvfile)


for filename in filenames:

    tree = ET.parse(filename)

    root = tree.getroot()


    PrimoFor=[]


    print("Dati Riepilogo per aliquota IVA e natura")

    for datir in root.iter('DatiRiepilogo'):

            for element in datir:

                print(element.tag,element.text)

                PrimoFor.append(element.text)


    for CedentePrestatore in root.iter('CedentePrestatore'):

        for TagFiglioCedentePrestatore in CedentePrestatore:

                for TagNipoteCedentePrestatore in TagFiglioCedentePrestatore:

                    for ProNipoteCedentePrestatore in TagNipoteCedentePrestatore:

                        print(ProNipoteCedentePrestatore.tag,ProNipoteCedentePrestatore.text)

                        PrimoFor.append(ProNipoteCedentePrestatore.text)

    for DatiGeneraliDocumento in root.iter('DatiGeneraliDocumento'):

        for FiglioDatiGeneraliDocumento in DatiGeneraliDocumento:

            if(FiglioDatiGeneraliDocumento.tag!='Divisa'):

                print(FiglioDatiGeneraliDocumento.tag,FiglioDatiGeneraliDocumento.text)

                PrimoFor.append(FiglioDatiGeneraliDocumento.text)

    for DatiPagamento in root.iter('DatiPagamento'):

        for TagFiglioDatiPagamento in DatiPagamento:

            for TagNipoteDatiPagamento in TagFiglioDatiPagamento:

                if(TagNipoteDatiPagamento.tag=='ModalitaPagamento'):

                    print(TagNipoteDatiPagamento.tag,TagNipoteDatiPagamento.text)

                    PrimoFor.append(TagNipoteDatiPagamento.text)


    csv_writer.writerow(PrimoFor)


#closecsv 

csvfile.close()


查看完整回答
反对 回复 2021-12-09
  • 1 回答
  • 0 关注
  • 329 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号