Подтвердить что ты не робот

Как открыть файл с помощью argparse?

Я хочу открыть файл для чтения с помощью argparse. В cmd он должен выглядеть так: my_program.py/filepath

Что моя попытка:

parser = argparse.ArgumentParser()
parser.add_argument('file', type = file)
args = parser.parse_args()
4b9b3361

Ответ 1

Тип аргумента должен быть строкой (по умолчанию она по умолчанию). Сделайте так:

parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()
with open(args.filename) as file:
  # do stuff here

Ответ 2

Взгляните на документацию: http://docs.python.org/2/library/argparse.html#type

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('file', type=argparse.FileType('r'))
args = parser.parse_args()

print args.file.readlines()

Ответ 3

Чтобы файл был закрыт грациозно, вы можете комбинировать argparse.FileType с выражением "with"

# ....

parser.add_argument('file', type=argparse.FileType('r'))
args = parser.parse_args()

with args.file as file:
    print file.read()

--- обновление ---

О, @Wernight уже сказал, что в комментариях

Ответ 4

Я просто добавлю возможность использовать pathlib:

import argparse, pathlib

parser = argparse.ArgumentParser()
parser.add_argument('file', type=pathlib.Path)
args = parser.parse_args()

with args.file.open('r') as file:
    print(file.read())

Ответ 5

Эта реализация позволяет параметру "имя файла" быть необязательным, а также давать краткое описание, если и когда пользователь вводит аргумент -h или --help.

parser = argparse.ArgumentParser(description='Foo is a program that does things')
parser.add_argument('filename', nargs='?')
args = parser.parse_args()

if args.filename is not None:
    print('The file name is {}'.format(args.filename))
else:
    print('Oh well ; No args, no problems')