我必须使用命令提示符和python接收csv文件形式的输入,然后读取它并将其转换为与csv文件同名的xml文件,但扩展名为.xml的文件或用户可以设置使用-o --output可选命令行参数的输出文件名和路径。好吧,我已经在Google上搜索了几天,到目前为止,我的程序允许我输入命令行参数,并且我可以将csv转换为xml文件,但不会使用与csv文件相同的名称或当用户使用时打印设置名称。相反,它只是打印出一个空白文件。这是我的代码: import sys, argparse import csv import indent from xml.etree.ElementTree import ElementTree, Element, SubElement, Comment, tostring parser=argparse.ArgumentParser(description='Convert wordlist text files to various formats.', prog='Text Converter') parser.add_argument('-v','--verbose',action='store_true',dest='verbose',help='Increases messages being printed to stdout') parser.add_argument('-c','--csv',action='store_true',dest='readcsv',help='Reads CSV file and converts to XML file with same name') parser.add_argument('-x','--xml',action='store_true',dest='toxml',help='Convert CSV to XML with different name') parser.add_argument('-i','--inputfile',type=argparse.FileType('r'),dest='inputfile',help='Name of file to be imported',required=True) parser.add_argument('-o','--outputfile',type=argparse.FileType('w'),dest='outputfile',help='Output file name') args = parser.parse_args() def main(argv): reader = read_csv() if args.verbose: print ('Verbose Selected') if args.toxml: if args.verbose: print ('Convert to XML Selected') generate_xml(reader) if args.readcsv: if args.verbose: print ('Reading CSV file') read_csv() if not (args.toxml or args.readcsv): parser.error('No action requested') return 1sys.exit(main(sys.argv))对于generate_xml()函数,您可以忽略它,因为它接受以某种方式格式化的csv文件,因此您可能无法理解它,但是,我认为问题出在tree.write()上,因为该部分生成的XML文件的名称为是用代码本身而不是命令提示符下的参数编写的。
2 回答
森栏
TA贡献1810条经验 获得超5个赞
您需要将文件参数传递给generate_xml()。您似乎在args.outputfile中具有输出文件。
generate_xml(reader, args.outputfile)
...
def generate_xml(reader, outfile):
...
tree.write(outfile)
您可能还应该利用args.inputfile:
reader = read_csv(args.inputfile)
...
def read_csv(inputfile):
return list(csv.reader(inputfile))
并且此行没有做任何有用的事情,它处理.csv文件,但对结果不做任何事情:
read_csv()
添加回答
举报
0/150
提交
取消