Я делаю программу на Python, которая анализирует поля в некоторых строках ввода. Я хотел бы позволить пользователю вводить разделитель полей в качестве опции из командной строки. Для этого я использую optparse
. Я столкнулся с проблемой, что ввод чего-то вроде \ t
будет отделяться буквально от \ t
, а не на вкладке, как я хочу. Я почти уверен, что это Python, а не оболочка, так как я пробовал каждую комбинацию кавычек, обратных косых черт и t
, о которых я могу думать.
Если бы я мог получить optparse
, чтобы аргумент был простым вводом ( есть такая штука?), а не raw_input
, я думаю, это сработает. Но я понятия не имею, как это сделать.
Я также пробовал различные замены и уловки с регулярными выражениями, чтобы превратить строку из двух символов «\ t»
в односимвольную вкладку, но безуспешно .
Пример, где input.txt
- это:
поле 1 [вкладка] поле \ t2
(Примечание: [вкладка]
является символом табуляции, а поле \ 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
Это не то, что я хочу.