Он имеет преимущество в обработке опции через модуль «optparse», а не через последующую обработку результатов анализа.

аю программу на Python, которая будет анализировать поля в некоторых входных строках. Я бы хотел, чтобы пользователь вводил разделитель полей в качестве опции из командной строки. я используюoptparse сделать это. Я сталкиваюсь с проблемой, что ввод чего-то вроде\t разделится буквально на\t, а не на вкладке, что я и хочу. Я почти уверен, что это Python, а не оболочка, так как я пробовал каждую комбинацию кавычек, обратной косой черты иtэто то, что я могу думать.

Если бы я мог получитьoptparse чтобы аргумент был простым вводом (есть ли такая вещь?), а неraw_inputЯ думаю, что это будет работать. Но я понятия не имею, как это сделать.

Я также пробовал различные замены и трюки с регулярными выражениями, чтобы превратить строку из двух символов"\t" в одну вкладку персонажа, но безуспешно.

Пример, гдеinput.txt является:

field 1[tab]field\t2

(Запись:[tab] является символом табуляции иfield\t2 это строка из 8 символов)

parseme.py:

#!/usr/bin/python
from optparse import OptionParser  
parser = OptionParser()  
parser.add_option("-d", "--delimiter", action="store", type="string",  
    dest="delimiter", default='\t')  
parser.add_option("-f", dest="filename")  
(options, args) = parser.parse_args()  
Infile = open(options.filename, 'r')  
Line = Infile.readline()  

Fields = Line.split(options.delimiter)  
print Fields[0]  
print options.delimiter  

Infile.close()  

Это дает мне:

$ parseme.py -f input.txt  
field 1  
[tab]

Привет, отлично, настройки по умолчанию работали правильно. (Да, я знаю, что мог бы просто установить \ t по умолчанию и забыть об этом, но я хотел бы знать, как справиться с этим типом проблемы.)

$ parseme.py -f input.txt -d '\t'  
field 1[tab]field  
\t

Это не то, что я хочу.

Ответы на вопрос(4)

Ваш ответ на вопрос