我见过类似的问题,但不是适合这种情况的解决方案。我有一个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那么
答案 0 :(得分:0)
您没有正确访问该变量。
您将其存储在名为-i的变量中。尝试调用它-input_file,删除,dest,并通过args.input_file访问它
os.getcwd(),会给你工作目录,而不是当前路径。获取当前路径os.path.dirname(os.path.abspath("__file__"))
我不知道你是否正确地说它,但是根据我建议的结构,用法是python test.py -input_file filename
编辑:您可以通过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
测试显示没有任何内容创建文件。