04 Cours Chaînes
Introduction⚓︎
Pour le traitement de données textuelles, Python utilise les chaînes de caractères (string).
Pour délimiter le texte on utilise des guillemets " (double-quote) ou des apostrophes '
(single-quote).
mois1 = 'janvier'
mois2 = "février"
print(mois1, mois2)
janvier février
Les deux formes sont très utiles car elles permettent d’utiliser des guillemets ou des apostrophes dans des chaînes de caractères de manière simple.
arbre = "l'olivier"
print(arbre)
cuisson_pates = "huit minutes (8')"
print(cuisson_pates)
record_100m = 'neuf secondes et 58 dixièmes (9"58)'
print(record_100m)
l'olivier
huit minutes (8')
neuf secondes et 58 dixièmes (9"58)
Sinon, pour avoir une apostrophe ou un guillemet dans une chaîne de caractères, il faut le faire
précéder d’un \ (backslash). Ce qui est beaucoup moins lisible, mais parfois obligatoire (par
exemple une chaîne avec à la fois des guillemets et des apostrophes).
arbre = 'l\'alisier'
pates = '8\''
record = "9\"58"
print(arbre, pates, record)
duel = 'guillemet: " et apostrophes: \' peuvent être utilisés dans une même chaîne...'
print(duel)
multi = '''Dans une "triplequoted" (voire plus loin), on peut (presque) tout utiliser: `"“ ”,'"«»'"' et ça ne pose pas de problème...'''
print(multi)
l'alisier 8' 9"58
guillemet: " et apostrophes: ' peuvent être utilisés dans une même chaîne...
Dans une "triplequoted" (voire plus loin), on peut (presque) tout utiliser: `"“ ”,'"«»'"' et ça ne pose pas de problème...
Cohérence⚓︎
On ne peut pas mélanger les guillemets et les apostrophes pour délimiter une chaîne de caractères.
a = "azerty'
a = 'azerty"
Les deux instructions précédentes génèrent des erreurs.
Caractères spéciaux⚓︎
Il est possible de définir des chaînes de caractères qui contiennent des caractères spéciaux. Ils
sont introduits par des séquences de deux caractères dont le premier est \. On l’appelle le
caractère d’échappement.
- retour à la ligne :
\n - tabulation :
\t - backslash :
\\ - un caractère unicode avec son code :
\uXXXX(où lesXXXXsont le code hexadécimal représentant ce caractère)
Plus d’information dans la documentation officielle
print("Une belle présentation, c'est :")
print('\t- bien ordonné')
print('\t- aligné')
print("\t- même s'il y en a plein\nEt c'est plus joli.")
Une belle présentation, c'est :
- bien ordonné
- aligné
- même s'il y en a plein
Et c'est plus joli.
Chaînes multilignes⚓︎
Pour écrire plusieurs lignes d’une façon plus lisible, il existe les chaînes multilignes :
# L'équivalent est :
print("""
Une belle présentation, c'est :
\t- bien ordonné
\t- aligné
\t- même s'il y en a plein
Et c'est plus joli.""")
Une belle présentation, c'est :
- bien ordonné
- aligné
- même s'il y en a plein
Et c'est plus joli.
Les deux formes de délimiteurs sont aussi utilisables : guillemets triples ou apostrophes triples.
multi1 = '''m
a
r
s est un mois "multiligne"'''
print(multi1, '\n')
multi2 = """a
v
r
i
l l'est aussi"""
print(multi2)
m
a
r
s est un mois "multiligne"
a
v
r
i
l l'est aussi
Unicode⚓︎
En Python 3 , toutes les chaînes de caractères sont unicode, ce qui permet d’utiliser des alphabets différents, des caractères accentués ou des pictogrammes, etc.
Exemples de caractères spéciaux :
unicode_str = "Les échecs (♔♕♖♗♘♙), c'est \u263A"
print(unicode_str)
japanese_str = 'Du japonais : ウェブ'
print(japanese_str)
mix_str = '你好 kollha दुनिया'
print('"' + mix_str + '"', 'veut dire: "bonjour tout le monde"')
Les échecs (♔♕♖♗♘♙), c'est ☺
Du japonais : ウェブ
"你好 kollha दुनिया" veut dire: "bonjour tout le monde"
Pour une liste de caractères unicode, voir ici.
Concaténation⚓︎
La concaténation est l'opération qui consiste à rassembler des chaînes de caractères en les collant bout à bout.
On peut concaténer deux chaînes de caractères en utilisant l’opérateur + (recommandé) :
gauche = 'Bonjour'
droite = ' tout le monde !'
ensemble = gauche + droite
print(ensemble)
Bonjour tout le monde !
Chaînes formatées (f-string)⚓︎
Depuis Python 3.6, il existe une syntaxe appelée f-string qui ajoute de la concision et de la lisibilité :
f"La {<variable>:<format>} est nommée dans la chaîne."
import math
print(f'pi sur 3 décimales : {math.pi:.03f}')
pi sur 3 décimales : 3.142
un_nombre = 1
un_long_nombre = 12345
un_nombre_aligne_vers_la_droite = f"{un_nombre:>5}" # Syntaxe : f"{number:>width}"
print(un_nombre)
print(un_long_nombre)
print(un_nombre_aligne_vers_la_droite)
1
12345
1
Le formatage est particulièrement utile pour les dates, par exemple :
jour = 8
mois = 9
annee = 2022
date = f"{jour:02}/{mois:02}/{annee}"
print(date)
08/09/2022
Accès à un caractère⚓︎
Les caractères d’une chaîne de caractères sont indexés à partir de zéro et s’obtiennent en indiquant leur numéro d’indice entre crochets, comme pour les listes :
mot = "ballon"
print(mot[0])
print(mot[4])
b
o
On peut aussi accéder à une sous-chaîne de caractères en définissant entre crochets l'intervalle que l'on souhaite :
chaine[a:b] désigne la sous-chaine de chaine qui commence au caractère d'indice a, et termine au caractère d'indice b - 1. Si on omet a, elle commence au début, si on omet b, elle termine à la fin.
On peut aussi numéroter en négatif à partir de la fin.
mot = "ballon"
print(mot[0:3])
print(mot[:3])
print(mot[3:6])
print(mot[3:])
print(mot[3:-1])
bal
bal
lon
lon
lo
Immutabilité⚓︎
Les chaînes de caractères sont des séquences dites immutables, on ne peut pas les modifier. Toute opération sur des chaînes de caractères revient à en créer une nouvelle du même type, même si celle-ci est temporaire.
Concrètement, chaine[i] permet d'accéder au caractère d'indice i, mais pas de le modifier.
chaine1 = 'abcdefgh'
chaine1[3] = 'D'
print(chaine1)
TypeError: 'str' object does not support item assignment
Il faut construire une nouvelle chaîne de caractères en concaténant des morceaux (slices) de la chaîne originale :
nouvelle_chaine = chaine1[:3] + 'D' + chaine1[4:]
print(nouvelle_chaine)
abcDefgh
Ou alors en utilisant une transformation en liste puis à nouveau en chaîne :
a = list(chaine1)
a[3] = 'D'
print(''.join(a))
abcDefgh
```
Type str⚓︎
On peut utiliser la fonction str() pour créer une chaîne de caractères à partir d’autres objets.
a = 23
ch_a = str(a)
print(type(a), a)
print(type(ch_a), repr(ch_a))
a = 3.14
ch_a = str(a)
print(type(a), a)
print(type(ch_a), repr(ch_a))
<class 'int'> 23
<class 'str'> '23'
<class 'float'> 3.14
<class 'str'> '3.14'
Cette fonction s'applique sur les types connus, par exemple les listes :
liste = [1, 2, 3, 4]
print(type(liste), repr(liste))
chaine = str(liste)
print(type(chaine), chaine)
print(type(chaine), repr(chaine))
print("liste[0] = ", liste[0], ", liste[1] = ", liste[1])
print("chaine[0] = ", chaine[0], ", chaine[1] = ", chaine[1])
<class 'list'> [1, 2, 3, 4]
<class 'str'> [1, 2, 3, 4]
<class 'str'> '[1, 2, 3, 4]'
liste[0] = 1 , liste[1] = 2
chaine[0] = [ , chaine[1] = 1
Fonctions et méthodes principales⚓︎
Existence : opérateur in⚓︎
On peut savoir si une chaîne se trouve dans une autre :
print('123' in 'azerty_123_uiop')
print('AZE' in 'azerty_123_uiop')
print('aze' not in 'azerty_123_uiop')
True
False
False
Longueur : fonction len()⚓︎
La longueur d’une chaîne s’obtient avec len().
print(len(non_mutable))
8
Méthodes :⚓︎
On appelle méthode une fonction qui a été définie pour un certain type d'objets. La syntaxe est :
objet.methode()
Pour les chaînes de caractères, il en existe de nombreuses déjà implémentées dans Python, par exemple :
x.replace('old', 'new'): retourne une nouvelle chaîne de caractères contruite à partir dexen remplaçant toutes les occurrence de "old" par "new"
chaine1 = "ababab"
chaine2 = chaine1.replace("a", "c")
print(chaine1)
print(chaine2)
ababab
cbcbcb
x.lower(): retourne une nouvelle chaîne de caractères contruite à partir dexen convertissant les lettres en minusculesx.upper(): retourne une nouvelle chaîne de caractères contruite à partir dexen convertissant les lettres en majuscules
chaine1 = "aba3-bab"
chaine2 = chaine1.upper()
print(chaine1)
print(chaine2)
aba3-bab
ABA3-BAB
« Multiplication » d’une chaîne de caractères⚓︎
On peut utiliser l’opérateur * pour concaténer un certain nombre de fois une chaîne de caractères avec elle même :
chaine1 = 'edf' * 5
chaine2 = 3 * chaine
chaine3 = 'x' * 7 + 'y' * 7 + 'z' * 7
print(chaine1)
print(chaine2)
print(chaine3)
edfedfedfedfedf
edfedfedfedfedfedfedfedfedfedfedfedfedfedfedf
xxxxxxxyyyyyyyzzzzzzz