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

时间:2012-02-18 07:58:23

标签: python python-3.x

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

'\n'

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

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

这是否可以在Python中构建转义字符字典到其文字替换?

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

2 个答案:

答案 0 :(得分:12)

要防止对文字字符串\进行特殊处理,可以使用r前缀:

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

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

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

答案 1 :(得分:5)

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

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

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

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

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

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