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

使用Argparse在Python中创建文件转换器

使用Argparse在Python中创建文件转换器

白衣染霜花 2021-03-05 14:10:00
我必须使用命令提示符和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()


查看完整回答
反对 回复 2021-03-31
  • 2 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信