Python argparse输入文件错误

时间:2015-11-11 16:53:53

标签: python argparse

我见过类似的问题,但不是适合这种情况的解决方案。我有一个argparser函数:

def IO_fileParse():
     parser = argparse.ArgumentParser();
     parser.add_argument("-i", dest="input_file", help="no file with this name") 
     args = parser.parse_args();

     input_file = os.path.join(os.getcwd(),args.input_file)
     if not os.path.exists(input_file):
         print(" ------------------------------------------------");
         print("Error: -input_file Cannot find input file with that name.");
         print(" ------------------------------------------------");
         parser.print_help();
         sys.exit();

我想说“如果你在目录中找不到带有-i名称的文件,请打印帮助并退出脚本。”

实际发生的是,这似乎是一个带有输入文件名称的空文件?

如何更改上面的代码,说“如果-i文件不存在,告诉用户此文件不存在”(并且不要创建一个文件名不存在的空文件)。 / p>

我也尝试过os.path.isfile和os.path.exists,并且都没有给我我想要的错误?...而且我也尝试过,如果不是args.input_file那么

2 个答案:

答案 0 :(得分:0)

  1. 取出分号。他们为什么在那里?
  2. 您没有正确访问该变量。

  3. 您将其存储在名为-i的变量中。尝试调用它-input_file,删除,dest,并通过args.input_file访问它

  4. os.getcwd(),会给你工作目录,而不是当前路径。获取当前路径os.path.dirname(os.path.abspath("__file__"))

  5. 我不知道你是否正确地说它,但是根据我建议的结构,用法是python test.py -input_file filename

  6. 编辑:您可以通过parser.add_argument("-i", "--input_name")

    提供速记选项和完整表格

    此代码适用于我

    def IO_fileParse():
        parser = argparse.ArgumentParser()
        parser.add_argument("-input_file", help="no file with this name")
        args = parser.parse_args()
    
        input_file = os.path.join(os.getcwd(),args.input_file)
        print(input_file)
        if not os.path.exists(input_file):
            print(" ------------------------------------------------")
            print("Error: -input_file Cannot find input file with that name.")
            print(" ------------------------------------------------")
            parser.print_help()
            sys.exit()
    
    IO_fileParse()
    

答案 1 :(得分:0)

除了小调整之外,我发现你的脚本没有问题。这是我的测试:

In [52]: p=argparse.ArgumentParser()    
In [53]: p.add_argument('-i','--input-file')
...

没有标记选项,默认值为None,路径连接不起作用。它应该被赋予有效的默认值或使用if args.input_file is not None:测试。

In [54]: args=p.parse_args(''.split())    
In [55]: args
Out[55]: Namespace(input_file=None)

In [56]: name=os.path.join(os.getcwd(),args.input_file)
...
AttributeError: 'NoneType' object has no attribute 'startswith'

使用现有文件名:

In [57]: args=p.parse_args('-i test'.split())
In [58]: args
Out[58]: Namespace(input_file='test')
In [59]: name=os.path.join(os.getcwd(),args.input_file)
In [60]: name
Out[60]: '/home/paul/test'   # valid file name
In [61]: os.path.exists(name)
Out[61]: True    # it exists on my system

随机选择名称

In [62]: args=p.parse_args('-i random'.split())
In [63]: name=os.path.join(os.getcwd(),args.input_file)
In [65]: os.path.exists(name)
Out[65]: False    # it doesn't exist

重复exists测试显示没有任何内容创建文件。