2016-10-18 11 views
3

У меня есть сценарий, в который пользователи включают пути для входных и выходных файлов.Каков наилучший способ «заставить» пользователей использовать определенное расширение файла с помощью argparse?

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument("i", help = "input path") 
parser.add_argument("o", help = "output path") 
args = parser.parse_args() 
file_input = args.input 
file_output = args.output 

Теперь я хочу, чтобы убедиться, что пользователи создают выходной файл, который представляет собой текстовый файл с расширением .txt.

(1) Я мог бы с помощью ошибки сообщить пользователям, что они должны использовать расширение txt.

(2) Я мог проверить, было ли использовано расширение .txt. Если нет, я просто добавлю его.

Первое относительно легко:

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument("i", help = "input path") 
parser.add_argument("o", help = "output path") 
args = parser.parse_args() 
file_input = args.input 
file_output = args.output 
if file_output.endswith("txt") != True: 
    raise argparse.ArgumentTypeError('File must end in extension .txt!') 

Как один выполнить последний?

+0

'if not file_output.endswith ('. Txt'): file_output + = '.txt''? – mgilson

+0

Кроме файла 'file_output + = '.txt''? –

+0

Взгляните на [этот вопрос] (http://stackoverflow.com/questions/15203829/python-argparse-file-extension-checking), я думаю, что он похож на ваш. – linpingta

ответ

2

Вы можете определить функцию type, которая добавит требуемое расширение, например.

def txtname(astr): 
    if not astr.endswith('.txt'): 
     astr += '.txt' 
    return astr 

In [724]: parser=argparse.ArgumentParser() 
In [725]: parser.add_argument('-i',type=txtname); 
In [726]: parser.add_argument('-o',type=txtname); 
In [728]: parser.parse_args(['-i','inname','-o','oname.txt']) 
Out[728]: Namespace(i='inname.txt', o='oname.txt') 

Эта функция также может поднять ValueError, если вам не нравится, некоторые расширения или формы имени файла.