Skip to content

Chaînes brutes en Python

En Python, les chaînes préfixées par r ou R, telles que r’…’ et r »… », sont appelées chaînes brutes et traitent les barres obliques inverses comme des caractères littéraux. Les chaînes brutes sont utiles lors de la gestion de chaînes qui utilisent beaucoup de barres obliques inverses, telles que les chemins Windows et les modèles d’expressions régulières.

Cet article décrit le contenu suivant.

  • Séquences d’échappement
  • Les chaînes brutes traitent les barres obliques inverses comme des caractères littéraux
  • Convertir des chaînes normales en chaînes brutes avec repr()
  • Les chaînes brutes ne peuvent pas se terminer par un nombre impair de barres obliques inverses

Séquences d’échappement

En Python, les caractères qui ne peuvent pas être représentés dans une chaîne normale (tels que les tabulations, les sauts de ligne, etc.) sont décrits à l’aide d’une séquence d’échappement avec une barre oblique inverse (telle que t ou n), similaire au langage C.

s = 'atbnAtB'
print(s)
# a b
# A B

Les chaînes brutes traitent les barres obliques inverses comme des caractères littéraux

Les chaînes préfixées par r ou R, telles que r’…’ et r »… », sont appelées chaînes brutes et traitent les barres obliques inverses comme des caractères littéraux. Dans les chaînes brutes, les séquences d’échappement ne sont pas traitées spécialement.

rs = r'atbnAtB'
print(rs)
# atbnAtB

Il n’y a pas de type spécial pour les chaînes brutes ; c’est juste une chaîne, qui équivaut à une chaîne régulière avec des barres obliques inverses représentées par \.

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

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

Dans une chaîne normale, une séquence d’échappement est considérée comme un caractère, mais dans une chaîne brute, les barres obliques inverses sont également comptées comme des caractères.

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']

Chemins Windows

L’utilisation de la chaîne brute est utile lors de la représentation d’un chemin Windows sous forme de chaîne.

Les chemins Windows sont séparés par des barres obliques inverses , donc si vous utilisez une chaîne normale, vous devez échapper chacun comme \, mais vous pouvez l’écrire tel quel avec une chaîne brute.

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

Notez qu’une chaîne se terminant par un nombre impair de barres obliques inverses génère une erreur, comme décrit ci-dessous. Dans ce cas, vous devez l’écrire dans une chaîne normale ou écrire uniquement la barre oblique inverse finale comme une chaîne normale et la concaténer.

path2 = 'C:\Windows\system32\'
# rpath2 = r'C:Windowssystem32'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:Windowssystem32' + '\'
print(path2 == rpath2)
# True

Convertir des chaînes normales en chaînes brutes avec repr()

Utilisez la fonction intégrée repr() pour convertir des chaînes normales en chaînes brutes.

s_r = repr(s)
print(s_r)
# 'atbnAtB'

La chaîne renvoyée par repr() a ‘ au début et à la fin.

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

En utilisant des tranches, vous pouvez obtenir la chaîne équivalente à la chaîne brute.

s_r2 = repr(s)[1:-1]
print(s_r2)
# atbnAtB

print(s_r2 == rs)
# True

print(r't' == repr('t')[1:-1])
# True

Les chaînes brutes ne peuvent pas se terminer par un nombre impair de barres obliques inverses

Étant donné que les barres obliques inverses échappent au ‘ ou  » final, une erreur se produit s’il y a un nombre impair de barres obliques inverses à la fin de la chaîne.

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

print(r'\')
# \

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