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

2024-06-16 08:37:51 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试在argparse中创建一个参数,其中可以输入多个可读取的文件名。 在本例中,我只是试图打印每个文件对象以确保其正常工作,但我得到了错误:

error: unrecognized arguments: f2.txt f3.txt

。我怎么才能让它认出他们?

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

python program.py f1.txt f2.txt f3.txt

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()

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

parser.add_argument('file', nargs=3)

然后我可以把它们打印成字符串,但是我不能用'?'


Tags: 文件txtaddparser参数main文件名argparse
2条回答

只是要确保至少有一个争论

parser.add_argument('file',nargs='*')

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

parser.add_argument('file', type=argparse.FileType('r'), nargs='+')

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

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

或者,如果您的目标是读取0个或多个可读文件,则可以简单地将nargs='+'替换为nargs='*'。如果未提供命令行参数,则此操作将为您提供空列表。如果没有给您任何文件,您可能希望打开stdin—如果是这样,只需将default=[sys.stdin]作为参数添加到add_argument

然后要处理列表中的文件:

args = parser.parse_args()
for f in args.file:
    for line in f:
        # process file...

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

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

相关问题 更多 >