Reputation: 42500
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
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
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