从命令行将元字符作为参数传递给Python

Dar*_*nia 9 python escaping backslash command-line-arguments

我正在制作一个Python程序,它将解析某些输入行中的字段.我想让用户从命令行输入字段分隔符作为选项.我正在使用optparse这个.我遇到的问题就是输入类似于\t字面意思的东西\t,而不是在标签上,这就是我想要的.我很确定这是一个Python的东西而不是shell,因为我已经尝试了所有引号,反斜杠和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()  
Run Code Online (Sandbox Code Playgroud)

这给了我:

$ parseme.py -f input.txt  
field 1  
[tab]
Run Code Online (Sandbox Code Playgroud)

嘿,很好,默认设置正常.(是的,我知道我可以做出默认设置并忘记它,但我想知道如何处理这类问题.)

$ parseme.py -f input.txt -d '\t'  
field 1[tab]field  
\t
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.

Ign*_*ams 7

>>> r'\t\n\v\r'.decode('string-escape')
'\t\n\x0b\r'
Run Code Online (Sandbox Code Playgroud)