unescape escapes in strings
MRAB
google at mrabarnett.plus.com
Mon Feb 23 13:49:55 EST 2009
bvdp wrote:
> MRAB wrote:
>> bvdp wrote:
>>>
>>> When reading lines of data from a file in the from (no quotes!)
>>>
>>> foo\x20bar
>>>
>>> and I assign to a variable in a line line like:
>>>
>>> f = file('infile', 'r')
>>> for a in f:
>>> print a
>>>
>>> the string is read in as string with the literal characters 'f', 'o'
>>> ... 'x' , '2' ...
>>>
>>> as compared to an assignment like:
>>>
>>> a="foo\x20bar"
>>>
>>> which is identical to
>>>
>>> a="foo bar"
>>>
>>> Okay, so far ... I think this is what I want since my program is
>>> using space characters as delimiters and I'm trying to use the \x20
>>> notation to avoid splitting.
>>>
>>> But, now the problem. When I finally assign the string with the \x20
>>> to a variable the literals are still there. And here I really want
>>> them all nicely converted to the desired values.
>>>
>>> So, the question is: is there an "unescape()" for strings so that
>>> "foo\x20bar" is converted to "foo bar"????
>>>
>> >>> a = r"foo\x20bar"
>> >>> print a
>> foo\x20bar
>> >>> a = a.decode("string-escape")
>> >>> print a
>> foo bar
>>
>
> Thanks ... I think in my original testing I tried decode() but it didn't
> work. Testing more ...
>
> the file has 2 lines:
> foo bar
> foo\x20bar
>
> and the program to read is:
> f=file('in', 'r')
> for a in f:
> a = a.strip()
> a=a.decode()
You didn't specify what kind of decoding you want!
> print list(a)
>
> I get:
>
> python read.py
> []
> [u'f', u'o', u'o', u' ', u'b', u'a', u'r']
> [u'f', u'o', u'o', u'\\', u'x', u'2', u'0', u'b', u'a', u'r']
>
> So, the \x20 is still literal.
>
> Any other ideas??? I suppose I could write a re expression ... but
> surely that is not needed???
>
More information about the Python-list
mailing list