我想將給定csv文件的文件擴展名更改爲xml擴展名,反之亦然。在命令行,我可以輸入以下在python中使用argparse更改文件擴展名
Boo a.csv. giving a.xml
Boo a.xml. giving a.csv
Boo a.csv -out shoes.xml giving shoes.xml
這裏是我更新的代碼:
import os
import sys
import argparse
import csv
import indent
from xml.etree.ElementTree import ElementTree, Element, SubElement, Comment, tostring
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'
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
reader = read_csv(args.inputfile)
if args.verbose:
print ('Verbose Selected')
if args.verbose:
print ('Convert to XML with set name')
generate_xml(reader, args.outputfile)
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)
if (__name__ == "__main__"):
sys.exit(main(sys.argv))
現在我在X1得到一個錯誤,Y1,Z1,X2,Y2,Z2,成本=行,這是一個值錯誤,說:需要多個值來解壓
什麼是* tree *變量? – sergzach
它的糟糕的形式來說'== None'使用'是None'或更好,如果不是'args.outputfile:' – cmd
使用一個python調試器,比如idle,eric或者komodo。只需幾分鐘即可完成代碼,答案將很清楚! – tdelaney