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???

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to