Unescaping使用Python 3.2转义字符串中的字符

Mik*_*ain 6 python python-3.x

假设我在Python 3.2中有一个字符串,如下所示:

'\n'
Run Code Online (Sandbox Code Playgroud)

当我将它打印到控制台时,显然它显示为一个新行.我想要的是能够打印它作为反斜杠后跟一个n.此外,我需要为所有转义字符执行此操作,例如\ t.所以我正在寻找一个函数unescape(),对于一般情况,它将按如下方式工作:

>>> s = '\n\t'
>>> print(unescape(s)) 
'\\n\\t'
Run Code Online (Sandbox Code Playgroud)

这可能在Python中没有构建转义字符的字典到它们的字面替换吗?

(如果有人感兴趣,我这样做的原因是因为我需要在命令行上将字符串传递给外部程序.该程序了解所有标准转义序列.)

jfs*_*jfs 12

为了防止\在文字字符串中进行特殊处理,您可以使用r前缀:

s = r'\n'
print(s)
# -> \n
Run Code Online (Sandbox Code Playgroud)

如果您有一个包含换行符号(ord(s) == 10)的字符串,并且您希望将其转换为适合作为Python文字的表单:

s = '\n'
s = s.encode('unicode-escape').decode()
print(s)
# -> \n
Run Code Online (Sandbox Code Playgroud)


ber*_*nie 5

编辑:根据您的上一条评论,您可能希望从Unicode获得某些编码表示.这是一种方式:

>>> s = '\n\t'
>>> s.encode('unicode-escape')
b'\\n\\t'
Run Code Online (Sandbox Code Playgroud)

如果您不需要转义它们,请使用您的系统编码,例如:

>>> s.encode('utf8')
b'\n\t'
Run Code Online (Sandbox Code Playgroud)

您可以在子进程中使用它:

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

  • 虽然`repr()`非常有吸引力,但是这个_might_并不完全是预期的,因为这实际上会输出一个包含单引号的字符串,所以你最终会得到像`''\\n \\ r'这样的东西. "`. (2认同)
  • @MikeyCee:请参阅编辑以获得更好的选择. (2认同)