我只想打印原始字符串。不要转换Python中的特殊字符
[案例1]我知道把“R”的字符串之前可以工作
print r'123\r\n567"45'
>>`
123\r\n567"45
[案例2]但是,当它是一个变量
aaa = '123\r\n567"45'
print aaa
>>
123
567"45
是否有任何功能可以打印AAA与像Case1一样的效果?
我只想打印原始字符串。不要转换Python中的特殊字符
[案例1]我知道把“R”的字符串之前可以工作
print r'123\r\n567"45'
>>`
123\r\n567"45
[案例2]但是,当它是一个变量
aaa = '123\r\n567"45'
print aaa
>>
123
567"45
是否有任何功能可以打印AAA与像Case1一样的效果?
最明显的方法,使第2种情况的工作样病例1是使用原始字符串中的赋值语句:
aaa = r'123\r\n567"45'
现在,当您打印aaa
,你会得到实际的反斜杠和r
和n
个字符,而不是回车符和换行符。
如果您实际上是从其他来源(而不是使用字符串文字)加载aaa
,那么您的任务稍微复杂一些。实际上,您需要以某种方式转换字符串以获取所需的输出。
做一些接近你想要什么的一个简单的方法是使用repr
功能:
aaa = some_function() # returns '123\r\n567"45' and some_function can't be changed
print repr(aaa)
这将不太做你想做虽然什么,因为这将增加串绕的引号文本。如果你关心的是,你可以用切片删除:
print repr(aaa)[1:-1]
另一种方法来采取的是人工改造你想逃脱,例如人物与str.replace
或str.translate
。如果你只关心逃脱一些特殊字符而不是其他字符,这很容易做到。
print aaa.replace('\r', r'\r').replace('\n', r'\n')
最后一个选择是使用str.encode
一个名为unicode-escape
特殊字符集,这将逃脱是不可打印的ASCII中的所有字符:
print aaa.encode('unicode-escape')
这只能按预期在Python 2但是。在Python 3中,str.encode
总是返回bytes
实例,您需要再次使用decode
以获得str
(aaa.encode('unicode-escape').decode('ascii')
可以工作,但确实很难看)。
如果你真正想要的只是打印原始的字符串,而不是之前的文字前面加上一个r
,您可能需要使用python原有的功能repr
。例如。
>>> aaa = '123\r\n567"45'
>>> print repr(aaa)
'123\r\n567"45'
这相当于在这个(准确)的情况下,以
>>> print repr('123\r\n567"45')
'123\r\n567"45'
尝试与string.replace – Vishal
把'r'前的文字,如案例1:'AAA = r'123 \ r \ n567" 45'' –
errr ...的'r''前缀字符串,而不是'print'。 – jsbueno