Я делаю программу на 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
Это не то, что я хочу.