"force" 用户通过 argparse 使用特定文件扩展名的最佳方式是什么?
What is the best way to "force" users to use a certain file extension with argparse?
我有一个脚本,用户可以在其中包含输入和输出文件的路径名。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("i", help = "input path")
parser.add_argument("o", help = "output path")
args = parser.parse_args()
file_input = args.input
file_output = args.output
现在,我想确保用户创建的输出文件是文本文件,扩展名为 .txt
。
(1) 我可以通过错误告诉用户他们必须 使用 txt 扩展名。
(2) 我可以检查是否使用了 .txt
扩展名。如果没有,我会简单地添加它。
第一个相对容易:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("i", help = "input path")
parser.add_argument("o", help = "output path")
args = parser.parse_args()
file_input = args.input
file_output = args.output
if file_output.endswith("txt") != True:
raise argparse.ArgumentTypeError('File must end in extension .txt!')
如何完成后者?
您可以定义一个 type
函数来添加所需的扩展名,例如
def txtname(astr):
if not astr.endswith('.txt'):
astr += '.txt'
return astr
In [724]: parser=argparse.ArgumentParser()
In [725]: parser.add_argument('-i',type=txtname);
In [726]: parser.add_argument('-o',type=txtname);
In [728]: parser.parse_args(['-i','inname','-o','oname.txt'])
Out[728]: Namespace(i='inname.txt', o='oname.txt')
如果您不喜欢某些扩展名或文件名形式,该函数也可能引发 ValueError。
我有一个脚本,用户可以在其中包含输入和输出文件的路径名。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("i", help = "input path")
parser.add_argument("o", help = "output path")
args = parser.parse_args()
file_input = args.input
file_output = args.output
现在,我想确保用户创建的输出文件是文本文件,扩展名为 .txt
。
(1) 我可以通过错误告诉用户他们必须 使用 txt 扩展名。
(2) 我可以检查是否使用了 .txt
扩展名。如果没有,我会简单地添加它。
第一个相对容易:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("i", help = "input path")
parser.add_argument("o", help = "output path")
args = parser.parse_args()
file_input = args.input
file_output = args.output
if file_output.endswith("txt") != True:
raise argparse.ArgumentTypeError('File must end in extension .txt!')
如何完成后者?
您可以定义一个 type
函数来添加所需的扩展名,例如
def txtname(astr):
if not astr.endswith('.txt'):
astr += '.txt'
return astr
In [724]: parser=argparse.ArgumentParser()
In [725]: parser.add_argument('-i',type=txtname);
In [726]: parser.add_argument('-o',type=txtname);
In [728]: parser.parse_args(['-i','inname','-o','oname.txt'])
Out[728]: Namespace(i='inname.txt', o='oname.txt')
如果您不喜欢某些扩展名或文件名形式,该函数也可能引发 ValueError。