什么是“强制”用户使用argparse的特定文件扩展名的最佳方法是什么?

时间:2016-10-18 04:55:42

标签: python python-3.x argparse file-extension

我有一个脚本,用户包含输入和输出文件的路径名。

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!')

如何完成后者?

1 个答案:

答案 0 :(得分:2)

您可以定义添加所需扩展名的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。