使用 argparse 传递给 python 脚本的文件类型检查参数

alp*_*Ori 2 python file-type argparse

有没有办法使用文件类型检查文件名参数argparse?如果我可以创建正确类型的容器对象,似乎可以通过 type 或choices 关键字来完成。

我期待传入的文件类型(例如,file.txt),argparse如果文件类型不正确(例如),我想给出其自动消息.txt。例如,argparse 可能会输出

usage: PROG --foo filename etc... error: argument filename must be of type *.txt.
Run Code Online (Sandbox Code Playgroud)

也许我们可以尝试检测文件名字符串不以“.txt”结尾,而不是检测错误的文件类型,但这需要复杂的容器对象。

Mar*_*ers 5

您可以使用type=关键字来指定您自己的类型转换器;如果您的文件名不正确,请抛出ArgumentTypeError

import argparse

def textfile(value):
    if not value.endswith('.txt'):
        raise argparse.ArgumentTypeError(
            'argument filename must be of type *.txt')
    return value
Run Code Online (Sandbox Code Playgroud)

该类型转换器不具备的值转换..

parser.add_argument('filename', ..., type=textfile)
Run Code Online (Sandbox Code Playgroud)