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

我必须使用命令提示符和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 1

sys.exit(main(sys.argv))

对于generate_xml()函数,您可以忽略它,因为它接受以某种方式格式化的csv文件,因此您可能无法理解它,但是,我认为问题出在tree.write()上,因为该部分生成的XML文件的名称为是用代码本身而不是命令提示符下的参数编写的。

白衣染霜花
浏览 149回答 2
2回答

森栏

您需要将文件参数传递给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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python