argparse Python 2.7中一个参数的多个文件

O.r*_*rka 24 python parsing arguments file argparse

试图在argparse中创建一个参数,在这里可以输入几个可以读取的文件名. 在这个例子中,我只是试图打印每个文件对象,以确保它正常工作,但我收到错误:

error: unrecognized arguments: f2.txt f3.txt
Run Code Online (Sandbox Code Playgroud)

.我怎样才能让它识别出所有这些?

我的命令在终端运行程序并读取多个文件

python program.py f1.txt f2.txt f3.txt
Run Code Online (Sandbox Code Playgroud)

Python脚本

import argparse

def main():
    parser = argparse.ArgumentParser()      
    parser.add_argument('file', nargs='?', type=file)
    args = parser.parse_args()

    for f in args.file:
        print f

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我用过nargs='?'b/c我希望它是可以使用的任意数量的文件.如果我add_argument改为:

parser.add_argument('file', nargs=3)
Run Code Online (Sandbox Code Playgroud)

然后我可以打印它们作为字符串,但我不能让它与'?'一起工作

mch*_*421 52

如果您的目标是阅读一个或多个可读文件,您可以尝试这样做:

parser.add_argument('file', type=argparse.FileType('r'), nargs='+')
Run Code Online (Sandbox Code Playgroud)

nargs='+'将所有命令行参数收集到列表中.还必须有一个或多个参数或将生成错误消息.

type=argparse.FileType('r')尝试打开每个参数作为阅读文件.如果argparse无法打开文件,它将生成错误消息.您可以使用它来检查参数是否是有效且可读的文件.

或者,如果您的目标是读取零个或多个可读文件,则可以简单地替换nargs='+'nargs='*'.如果没有提供命令行参数,这将为您提供一个空列表.如果你没有给出任何文件,也许你可能想要打开标准输入 - 如果是这样,只需添加default=[sys.stdin]为参数add_argument.

然后处理列表中的文件:

args = parser.parse_args()
for f in args.file:
    for line in f:
        # process file...
Run Code Online (Sandbox Code Playgroud)

有关nargs的更多信息:https://docs.python.org/2/library/argparse.html#nargs

有关类型的更多信息:https://docs.python.org/2/library/argparse.html#type