Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing meta-characters to Python as arguments from command line

I'm making a Python program that will parse the fields in some input lines. I'd like to let the user enter the field separator as an option from the command line. I'm using optparse to do this. I'm running into the problem that entering something like \t will separate literally on \t, rather than on a tab, which is what I want. I'm pretty sure this is a Python thing and not the shell, since I've tried every combo of quotes, backslashes, and t's that I can think of.

If I could get optparse to let the argument be plain input (is there such a thing?) rather than raw_input, I think that would work. But I have no clue how to do that.

I've also tried various substitutions and regex tricks to turn the string from the two character "\t" into the one character tab, but without success.

Example, where input.txt is:

field 1[tab]field\t2

(Note: [tab] is a tab character and field\t2 is an 8 character string)

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()  

This gives me:

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

Hey, great, the default setting worked properly. (Yes, I know I could just make \t the default and forget about it, but I'd like to know how to deal with this type of problem.)

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

This is not what I want.

like image 823
Darlingtonia Avatar asked Apr 22 '11 07:04

Darlingtonia


1 Answers

>>> r'\t\n\v\r'.decode('string-escape')
'\t\n\x0b\r'
like image 179
Ignacio Vazquez-Abrams Avatar answered Sep 20 '22 20:09

Ignacio Vazquez-Abrams