gpt4 book ai didi

python - 如何使用python转换csv文件中文件夹中的多个xml文件?

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:23 24 4
gpt4 key购买 nike

1-我准备好了一个将 xml 文件转换为 csv 的代码。但实际上我需要多次执行此操作,然后每次都需要更改程序中 xml 文件的名称。我想做一个循环来读取文件夹位置中的每个“.xml”文件并执行 for所有文件。这是我的原始代码

import xml.etree.ElementTree as ET
import csv

tree = ET.parse("Shot_30AA.xml")
root = tree.getroot()

Shot_30AA = open('Shot_30AA.csv', 'w', newline='')
csvwriter = csv.writer(Shot_30AA)
head = []

ShotCode = root.attrib['ShotCode']
csvwriter.writerow(['ShotCode', ShotCode])
head.append(ShotCode)

for member in root.getchildren():
submembers = member.getchildren()
keys = submembers[0].attrib.keys()
csvwriter.writerow ("\n")
csvwriter.writerow(keys)
for submember in submembers:
row_data = [submember.attrib[k] for k in keys]
csvwriter.writerow(row_data )
Shot_30AA.close()

我尝试在我的文件夹中执行此操作,添加以下代码以仅执行一次

path = 'C:/Users/Desktop/Program'
for filename in os.listdir(path):
if not filename.endswith('.xml'): continue
ShotFile = os.path.join(path, filename)
tree = ET.parse(ShotFile)
root = tree.getroot()

filename = open( filename'.csv', 'w', newline='')
csvwriter = csv.writer(filename)
head = []

ShotFile = open('ShotFile.csv', 'w', newline='')
csvwriter = csv.writer(Shot_30AA)
head = []

ShotCode = root.attrib['ShotCode']
csvwriter.writerow(['ShotCode', ShotCode])
head.append(ShotCode)

for member in root.getchildren():
submembers = member.getchildren()
keys = submembers[0].attrib.keys()
csvwriter.writerow ("\n")
csvwriter.writerow(keys)
for submember in submembers:
row_data = [submember.attrib[k] for k in keys]
csvwriter.writerow(row_data )
ShotFile.close()

我希望通过一次运行获得所有 csv 格式的文件。

最佳答案

以下是根据您的代码可以工作的内容

def make_csv(folderpath, xmlfilename):
tree = ET.parse(os.path.join(folderpath, xmlfilename))
root = tree.getroot()
filename, _ = xmlfilename.rsplit('.', 1)
Shot_30AA = open(filename+'.csv', 'w', newline='')
csvwriter = csv.writer(Shot_30AA)
head = []

ShotCode = root.attrib['ShotCode']
csvwriter.writerow(['ShotCode', ShotCode])
head.append(ShotCode)

for member in root.getchildren():
submembers = member.getchildren()
keys = submembers[0].attrib.keys()
csvwriter.writerow("\n")
csvwriter.writerow(keys)
for submember in submembers:
row_data = [submember.attrib[k] for k in keys]
csvwriter.writerow(row_data)
Shot_30AA.close()

path = 'C:/Users/Desktop/Program'
for filename in os.listdir(path):
if filename.endswith('.xml'):
make_csv(path, filename)

编辑1:正如评论所指出的,您还应该看看 with open() as clause处理文件时

关于python - 如何使用python转换csv文件中文件夹中的多个xml文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56569763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com