gpt4 book ai didi

python - 将 XML 转换为 CSV

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:02 26 4
gpt4 key购买 nike

这是我更新后的代码,除了 generate_csv 部分的一点小问题外,大部分代码都有效。您可以忽略所有 generate_xml 部分。

import os
import sys
import argparse
import csv
import indent
from xml.etree.ElementTree import ElementTree, Element, SubElement, Comment, tostring
import xml.etree.ElementTree as etree

def get_args(args):
parser = argparse.ArgumentParser(description = "Converts CSV to XML")
parser.add_argument('-v','--verbose',action='store_true',dest='verbose',help='Increases messages being printed to stdout')
parser.add_argument("inputfile", help="Please input the name of the CSV file")
parser.add_argument('-o','--outputfile',help='(optional) Output file name',nargs='?')
args = parser.parse_args()
ext = os.path.splitext(args.inputfile)[1].lower()
if args.outputfile is None:
if ext == ".csv":
args.outputfile = os.path.splitext(args.inputfile)[0] + '.xml'

elif ext == ".xml":
args.outputfile = os.path.splitext(args.inputfile)[0] + '.csv'

elif args.outputfile:
if ext == ".csv":
outputfile = open(args.outputfile, 'w')
elif ext == ".xml":
outputfile = open(args.outputfile,'w')
else:
sys.stderr.write('ERROR: Invalid extension %s\n' % ext)
sys.exit(1)
return args

def main(argv):
args = get_args(argv[0:])
if args is None:
return 1
ext = os.path.splitext(args.inputfile)[1].lower()
if ext == ".csv":
reader = read_csv(open(args.inputfile))
generate_xml(reader, args.outputfile)

if ext == ".xml":
root = etree.parse(open(args.inputfile)).getroot()
generate_csv(root, args.outputfile)


if args.verbose:
print ('Verbose Selected')
if args.verbose:
print ('Convert to XML with set name')

return 0

def read_csv(inputfile):
return list(csv.reader(inputfile))

def generate_xml(reader,outfile):
root = Element('Solution')
root.set('version','1.0')
tree = ElementTree(root)
head = SubElement(root, 'DrillHoles')
description = SubElement(head,'description')
current_group = None
i = 0
for row in reader:
if i > 0:
x1,y1,z1,x2,y2,z2,cost = row
if current_group is None or i != current_group.text:
current_group = SubElement(description, 'hole',{'hole_id':"%s"%i})

collar = SubElement (current_group, 'collar',{'':', '.join((x1,y1,z1))}),
toe = SubElement (current_group, 'toe',{'':', '.join((x2,y2,z2))})
cost = SubElement(current_group, 'cost',{'':cost})
i+=1
head.set('total_holes', '%s'%i)
indent.indent(root)
tree.write(outfile)

def generate_csv(root, outfile):

with open(outfile, 'w') as file_:

writer = csv.writer(file_, delimiter="\t")

for a in zip(root.findall("drillholes/hole/collar"),
root.findall("drillholes/hole/toe"),
root.findall("drillholes/hole/cost")):
writer.writerow([x.text for x in a])

if (__name__ == "__main__"):
sys.exit(main(sys.argv))

这是我的新代码,但在 writer.writerow([x.text for x in a]) 中有一条错误消息:I/O operation on a closed file。我该如何修复它

最佳答案

import csv
import sys
import xml.etree.ElementTree as etree

if __name__ == "__main__":

file_name = sys.argv[1]
csv_file_name = '.'.join(file_name.split('.')[:-1]) + ".csv"

root = etree.parse(file_name).getroot()

with open(csv_file_name, 'w') as file_:

writer = csv.writer(file_, delimiter="\t")

for a in zip(root.findall("drillholes/hole/collar"),
root.findall("drillholes/hole/toe"),
root.findall("drillholes/hole/cost")):
writer.writerow([x.text for x in a])

关于python - 将 XML 转换为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17262409/

26 4 0
文章推荐: python - 使用 Python 导入 smtplib 时遇到问题
文章推荐: html - 仅 CSS :
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com