Несколько файлов для одного аргумента в argparse в Python 2.7
попытка сделать аргумент в 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)
тогда я могу напечатать их как строки, но я не могу заставить его работать с '?'
2 ответов
если ваша цель-чтение один или несколько читать файлы, вы можете попробовать это:
parser.add_argument('file', type=argparse.FileType('r'), nargs='+')
nargs='+'
собирает все аргументы командной строки в список. Также должен быть один или несколько аргументов или будет создано сообщение об ошибке.
type=argparse.FileType('r')
пытается открыть каждый аргумент в виде файла для чтения. Он будет генерировать сообщение об ошибке, если argparse не может открыть файл. Вы можете использовать это для проверки того, является ли аргумент допустимым и читаемым файл.
альтернативно, если ваша цель-прочитать ноль или больше читать файлы, вы можете просто заменить 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