...'
,"..."
En Python, se prefixas estes literais de cadea cun dos seguintes caracteres, o valor converterase nunha cadea sen expandir a secuencia de escape.
r
R
Útil cando se trata de cadeas que usan moitas barras invertidas, como camiños de Windows e patróns de expresións regulares.
A seguinte información ofrécese aquí.
- secuencia de escape
- Ignorar (desactivar) as secuencias de escape en cadeas sen formato
- Converte cadea normal en cadea bruta:
repr()
- Teña en conta a barra invertida ao final.
secuencia de escape
En Python, os caracteres que non se poden representar nunha cadea normal (como tabulacións e novas liñas) descríbense mediante secuencias de escape con barras inclinadas invertidas, de forma similar á linguaxe C. A continuación móstrase un exemplo dunha secuencia de escape.
\t
\n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B
Ignorar (desactivar) as secuencias de escape en cadeas sen formato
...'
,"..."
Se prefixas un literal de cadea deste tipo cunha das seguintes, o valor converterase nunha cadea sen expandir a secuencia de escape. A tal cadea chámase cadea bruta.
r
R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB
Non hai ningún tipo especial chamado tipo de cadea en bruto, é só un tipo de cadea e é igual a unha cadea normal cunha barra invertida representada como segue\\
print(type(rs))
# <class 'str'>
print(rs == 'a\\tb\\nA\\tB')
# True
Nunha cadea normal, unha secuencia de escape considérase como un carácter, pero nunha cadea en bruto, as barras inclinadas inversas tamén se contan como caracteres. A lonxitude da cadea e de cada carácter é a seguinte.
print(len(s))
# 7
print(list(s))
# ['a', '\t', 'b', '\n', 'A', '\t', 'B']
print(len(rs))
# 10
print(list(rs))
# ['a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B']
Ruta de Windows
Usar a cadea en bruto é útil cando queres representar unha ruta de Windows como unha cadea.
As rutas de Windows están separadas por barras invertidas, polo que se usa unha cadea normal, debe escapar da ruta do seguinte xeito, pero se usa unha cadea en bruto, pode escribila como está. Os valores son equivalentes.\\
path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True
Teña en conta que unha cadea que remata cun número impar de barras inclinadas inversas producirá un erro, como se describe a continuación. Neste caso, é necesario escribir a cadea como unha cadea normal, ou concatenala escribindo só o final da cadea como unha cadea normal.
path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True
Converte cadeas normais en cadeas brutas con repr()
Se queres converter unha cadea normal nunha cadea en bruto ignorando (desactivando) as secuencias de escape, podes usar a función incorporada repr().
s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'
O que repr() devolve é unha cadea que representa un obxecto de forma que teña o mesmo valor que cando se pasou a eval(), con caracteres iniciais e finais.
print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]
Usando porcións, podemos obter unha cadea equivalente á cadea en bruto coa r anexa.
s_r2 = repr(s)[1:-1]
print(s_r2)
# a\tb\nA\tB
print(s_r2 == rs)
# True
print(r'\t' == repr('\t')[1:-1])
# True
Teña en conta a barra invertida ao final.
Dado que unha barra invertida escapa do carácter de cita inmediatamente despois dela, producirase un erro se hai un número impar de barras invertidas ao final da cadea. Un número par de barras invertidas está ben.
# print(r'\')
# SyntaxError: EOL while scanning string literal
print(r'\\')
# \\
# print(r'\\\')
# SyntaxError: EOL while scanning string literal