Ignorar (desactivar) les seqüències d’escapada a Python amb cadenes en brut

Negocis

...',"..."A Python, si prefixeu aquests literals de cadena amb un dels caràcters següents, el valor es convertirà en una cadena sense expandir la seqüència d’escapada.

  • r
  • R

Útil quan es tracta de cadenes que utilitzen moltes barres invertides, com ara camins de Windows i patrons d’expressió regular.
La informació següent es proporciona aquí.

  • seqüència d’escapada
  • Ignoreu (desactiveu) les seqüències d’escapada en cadenes en brut
  • Converteix una cadena normal en una cadena en brut:repr()
  • Tingueu en compte la barra invertida al final.

seqüència d’escapada

A Python, els caràcters que no es poden representar en una cadena normal (com ara tabulacions i noves línies) es descriuen mitjançant seqüències d’escapament amb barres invertides, de manera similar al llenguatge C. A continuació es mostra un exemple d’una seqüència d’escapada.

  • \t
  • \n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B

Ignoreu (desactiveu) les seqüències d’escapada en cadenes en brut

...',"..."Si prefixeu aquest literal de cadena amb un dels següents, el valor es convertirà en una cadena sense expandir la seqüència d’escapada. Aquesta corda s’anomena corda en brut.

  • r
  • R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB

No hi ha cap tipus especial anomenat tipus de cadena en brut, només és un tipus de cadena i és igual a una cadena normal amb una barra invertida representada de la següent manera
\\

print(type(rs))
# <class 'str'>

print(rs == 'a\\tb\\nA\\tB')
# True

En una cadena normal, una seqüència d’escapada es considera com un caràcter, però en una cadena en brut, les barres invertides també es compten com a caràcters. La longitud de la cadena i de cada caràcter és la següent.

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

L’ús de la cadena en brut és útil quan voleu representar un camí de Windows com una cadena.

Els camins de Windows estan separats per barres invertides, de manera que si utilitzeu una cadena normal, haureu d’escapar del camí de la manera següent, però si feu servir una cadena en brut, podeu escriure-la tal qual. Els valors són equivalents.
\\

path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True

Tingueu en compte que una cadena que acaba amb un nombre senar de barres invertides donarà lloc a un error, tal com es descriu a continuació. En aquest cas, cal escriure la cadena com una cadena normal, o concatenar-la escrivint només el final de la cadena com una cadena 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

Converteix cadenes normals a cadenes en brut amb repr()

Si voleu convertir una cadena normal en una cadena en brut ignorant (desactivant) les seqüències d’escapada, podeu utilitzar la funció integrada repr().

s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'

El que repr() retorna és una cadena que representa un objecte de manera que tingui el mateix valor que quan es va passar a eval(), amb caràcters inicials i finals.

print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]

Utilitzant rodanxes, podem obtenir una cadena equivalent a la cadena en brut amb r adjunta.

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

Tingueu en compte la barra invertida al final.

Com que una barra invertida escapa del caràcter de cita immediatament després d’ella, es produirà un error si hi ha un nombre imparell de barres invertides al final de la cadena. Un nombre parell de barres invertides està bé.

# print(r'\')
# SyntaxError: EOL while scanning string literal

print(r'\\')
# \\

# print(r'\\\')
# SyntaxError: EOL while scanning string literal