2017-05-05 58 views
0

我只想打印原始字符串。不要转换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一样的效果?

+0

尝试与string.replace – Vishal

+0

把'r'前的文字,如案例1:'AAA = r'123 \ r \ n567" 45'' –

+0

errr ...的'r''前缀字符串,而不是'print'。 – jsbueno

回答

0

最明显的方法,使第2种情况的工作样病例1是使用原始字符串中的赋值语句:

aaa = r'123\r\n567"45' 

现在,当您打印aaa,你会得到实际的反斜杠和rn个字符,而不是回车符和换行符。

如果您实际上是从其他来源(而不是使用字符串文字)加载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.replacestr.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以获得straaa.encode('unicode-escape').decode('ascii')可以工作,但确实很难看)。

0

如果你真正想要的只是打印原始的字符串,而不是之前的文字前面加上一个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' 
0

可以使用repr功能在Python它做的事:

如果使用那么Python 2:

enter image description here

如果您使用的是python 3,那么: enter image description here