Mike Chamberlain
Mike Chamberlain

Reputation: 42500

Unescaping escaped characters in a string using Python 3.2

Say I have a string in Python 3.2 like this:

'\n'

When I print() it to the console, it shows as a new line, obviously. What I want is to be able to print it literally as a backslash followed by an n. Further, I need to do this for all escaped characters, such as \t. So I'm looking for a function unescape() that, for the general case, would work as follows:

>>> s = '\n\t'
>>> print(unescape(s)) 
'\\n\\t'

Is this possible in Python without constructing a dictionary of escaped characters to their literal replacements?

(In case anyone is interested, the reason I am doing this is because I need to pass the string to an external program on the command line. This program understands all the standard escape sequences.)

Upvotes: 7

Views: 14901

Answers (2)

jfs
jfs

Reputation: 414585

To prevent special treatment of \ in a literal string you could use r prefix:

s = r'\n'
print(s)
# -> \n

If you have a string that contains a newline symbol (ord(s) == 10) and you would like to convert it to a form suitable as a Python literal:

s = '\n'
s = s.encode('unicode-escape').decode()
print(s)
# -> \n

Upvotes: 13

mechanical_meat
mechanical_meat

Reputation: 169414

Edit: Based on your last remark, you likely want to get from Unicode to some encoded representation. This is one way:

>>> s = '\n\t'
>>> s.encode('unicode-escape')
b'\\n\\t'

If you don't need them to be escaped then use your system encoding, e.g.:

>>> s.encode('utf8')
b'\n\t'

You could use that in a subprocess:

import subprocess
proc = subprocess.Popen([ 'myutility', '-i', s.encode('utf8') ], 
                        stdout=subprocess.PIPE, stdin=subprocess.PIPE, 
                        stderr=subprocess.STDOUT)
stdout,stderr = proc.communicate()

Upvotes: 5

Related Questions