Он имеет преимущество в обработке опции через модуль «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
Это не то, что я хочу.