Python - Les fondamentaux
Chapitre 6 - Manipulation avancée des chaînes de caractères en Python

Utiliser les caractères d'échappements

Il faut distinguer le caractère d'échappement (\) des séquences d'échappement. Le caractère d'échappement est utilisé pour empêcher un caractère nécessaire au python d'interférer. Comme la double cote (") par exemple.

ma_chaine = "Le \"python\" c'est très bien."
print(ma_chaine)

Sortie console :
Le "python" c'est très bien.

Voilà la liste des séquences d'échappements :

Les séquences d'échappements
Séquence d'échappement Utilité Code Python Sortie console
Séquence d'échappement Utilité Code Python Sortie console
\n Retour à la ligne ma_chaine = "Le python \nc'est très bien."
print(ma_chaine)
Le python 
c'est très bien.
\t Tabulation ma_chaine = "Le python \tc'est très bien."
print(ma_chaine)
ma_chaine = "Le python \t\tc'est très bien."
print(ma_chaine)
Le python       c'est très bien.
Le python               c'est très bien.
\b Backspace (retour arrière au clavier) ma_chaine = "Le python\b c'est très bien."
print(ma_chaine)
Le pytho c'est très bien.
\r Retour chariot ma_chaine = "Le python \rc'est très bien."
print(ma_chaine)
 c'est très bien.
\\ Echapper le caractère d'échappement
Utile pour les chemins d'accès au dossier.
ma_chaine = "C:\\documents\\travail"
print(ma_chaine)
C:\documents\travail

Extraire les caractères d'une chaîne

On peut utiliser les index des lettres pour les sortir. Pour ce faire il faut utiliser les crochets [].

ma_chaine = "Hello World"
print(ma_chaine[0])

Sortie console :
H

On peut bien entendu utiliser des boucles.

ma_chaine = "Hello World"

for lettre in ma_chaine:
	print(lettre)

Sortie console :
H
e
l
l
o
	
W
o
r
l
d

Il est possible d'obtenir le même résultat avec une itération.

ma_chaine = "Hello World"

for i in range(len(ma_chaine)):
	print(i, ma_chaine[i])

Sortie console :
0 H
1 e
2 l
3 l
4 o
5
6 W
7 o
8 r
9 l
10 d

Pour sortir un mot d'une chaîne, il faut utiliser les [ ] également. Le premier chiffre correspond à la lettre de départ (inclus) et le second chiffre correspond à l'emplacement après la dernière lettre à récupérer (pas inclus).

ma_chaine = "Hello World"
print(ma_chaine[0:5])

Sortie console :
Hello

Si on utilise uniquement [:5], cela signifie que tout sera pris jusqu'à l'index 4 compris.

ma_chaine = "Hello World"
print(ma_chaine[:5])

Sortie console :
Hello

Pour récupérer le "World", il faut utiliser les index de la fin.

ma_chaine = "Hello World"
print(ma_chaine[6:11])

Sortie console :
World

Comme pour le départ, si on utilise [6:] sans chiffre après le double point, cela signifie que depuis l'index 6 jusqu'à la fin sera considéré.

ma_chaine = "Hello World"
print(ma_chaine[6:])

Sortie console :
World

Gérer la casse des chaînes de caractères

La classe objet STR (string) est native dans le python. Afin de pouvoir adapter une chaîne de caractère, il faut utiliser une méthode. Pour cela il faut ajouter ., le nom de la méthode ainsi que ( ).
Exemple :
print(chaine.upper())

Pour mettre toutes les lettres en majuscule, il faut utiliser la méthode .upper(). Ce qui est en majuscule le reste et ce qui ne l'est pas va passer en majuscule.

chaine = "Le python est fantastique"

print(chaine.upper())
		
Sortie console :
LE PYTHON EST FANTASTIQUE

Dans le cas de l'exemple ci-dessus, la modification est faite pour l'affichage dans la console. Mais la variable reste comme elle a été définie. Par conséquent, si on print la chaîne sans modifications juste après, on peut constater qu'elle est comme lors de sa définition.

chaine = "Le python est fantastique"

print(chaine.upper())
print(chaine)

Sortie console :
LE PYTHON EST FANTASTIQUE
Le python est fantastique

Pour passer tous les caractères en minuscule, il faut utiliser la méthode .lower().

chaine = "Le python est fantastique"
chaine = chaine.upper()
print(chaine)

print(chaine.lower())

Sortie console :
LE PYTHON EST FANTASTIQUE
le python est fantastique

Pour passer la première lettre du premier mot uniquement en majuscule, il faut utiliser la méthode .capitalize().

chaine = "le python est fantastique"

print(chaine.capitalize())

Sortie console :
Le python est fantastique

Pour passer la première lettre de tous les mots en majuscule, il faut utiliser la méthode .title().

chaine = "le python est fantastique"

print(chaine.title())

Sortie console :
Le Python Est Fantastique

Gérer les espaces dans une chaîne de caractères

Pour supprimer les espaces superflux en début (gauche) et fin (droit) de chaîne de caractères, il faut utiliser la méthode .strip().

chaine = " Le python c'est formidable "
print("***" + chaine.strip() + "***")

Sortie console :
***Le python c'est formidable***

Pour supprimer les espaces superflux en début (gauche) de chaîne de caractères, il faut utiliser la méthode .lstrip().

chaine = " Le python c'est formidable "
print("***" + chaine.lstrip() + "***")

Sortie console :
***Le python c'est formidable ***

Pour supprimer les espaces superflux en début (gauche) de chaîne de caractères, il faut utiliser la méthode .rstrip().

chaine = " Le python c'est formidable "
print("***" + chaine.rstrip() + "***")

Sortie console :
*** Le python c'est formidable***

Il est possible de combiner les méthodes de la vidéo 3 (mise en forme) avec ceux-ci.

chaine = " Le python c'est formidable "
print("***" + chaine.strip().upper() + "***")

Sortie console :
***LE PYTHON C'EST FORMIDABLE***

Supprimer et remplacer des caractères dans une chaîne

La méthode .replace() permet de remplacer des éléments dans une chaîne de caractère. La méthode attend 2 arguments entre double quotes (car du string) séparés par une virgule. Le premier étant la partie à remplacer et le deuxième étant la chaîne de remplacement. Il est possible de ne rien mettre dans la seconde double quotes pour insérer du texte vide.

chaine = "L' assembleur c'est facile , pas comme le python"

chaine = chaine.replace(" , pas comme le python", "")
print(chaine)

Sortie console :
L' assembleur c'est facile

On peut s'en servir pour remplacer des lettres par exemple.

chaine = "L' assembleur c'est facile , pas comme le python"

chaine = chaine.replace("a", "")
print(chaine)

Sortie console :

L' ssembleur c'est fcile , ps comme le python

Il est donc possible de remanier les textes comme on l'entend avec la méthode .replace().

chaine = "L' assembleur c'est facile , pas comme le python"

chaine = chaine.replace(" , pas comme le python", "")
print(chaine)

# L' assembleur c'est facile
chaine = chaine.replace("L' assembleur", "Le python")
print(chaine)

Sortie console :
L' assembleur c'est facile
Le python c'est facile

Scinder ou joindre une chaîne

La méthode split()

La méthode split() permet de scinder une chaîne de caractères. Elle peut être ou non utilisée avec un délimiteur (inséré entre les parenthèse de la méthode). Par défaut, le délimiteur sera l'espace.

prenoms = "luc zoe bob marc bil jean"

liste = prenoms.split()

print(liste)

Sortie console :
['luc', 'zoe', 'bob', 'marc', 'bil', 'jean']

Si l'on souhaite utiliser la virgule comme séparateur, il ne faut pas oublier de la définir comme délimiteur.
En oubliant, on obtient se résultat :

prenoms = "luc,zoe,bob,marc,bil,jean"

liste = prenoms.split()

print(liste)

Sortie console :
['luc,zoe,bob,marc,bil,jean']

En définissant la virgule comme délimiteur, on obtient ce résultat :

prenoms = "luc,zoe,bob,marc,bil,jean"

liste = prenoms.split(",")

print(liste)

Sortie console :
['luc', 'zoe', 'bob', 'marc', 'bil', 'jean']

Attention :
La virgule doit être considérée comme du texte (string) et doit par conséquent se trouver entre double cotes.

La méthode join()

A l'inverse de la méthode split, la méthode join permet de joindre des éléments entre eux (les concaténer). Le truc est qu'il faut appliquer la méthode sur une chaîne de caractères vide.

prenoms = "luc,zoe,bob,marc,bil,jean"

liste = prenoms.split(",")

chaine = "".join(liste)

print(chaine)

Sortie console :
luczoebobmarcbiljean

Si l'on souhaite un espace, il suffit de l'ajouter dans les doubles cotes :

prenoms = "luc,zoe,bob,marc,bil,jean"

liste = prenoms.split(",")

print(liste)

chaine = " ".join(liste)

print(chaine)

Sortie console :
['luc', 'zoe', 'bob', 'marc', 'bil', 'jean']
luc zoe bob marc bil jean

La méthode partition

La méthode partition() permet de récupérer un Tuple. c'est une partition car ce qui se trouve avant et après le délimiteur va se retrouvé dans un autre index.

chaine2 = "1 2 3 4 5 6 7 8 9"
print(chaine2.partition("5"))

Sortie console :
('1 2 3 4 ', '5', ' 6 7 8 9')

Rechercher des caractères dans une chaîne

Il est possible, à l'aide de différentes méthodes, de rechercher des lettres dans une chaîne de caractères (string).

La méthode index()

La méthode index() peut avoir 2 arguments. Le premier est le caractère recherché et le second est l'index de départ.

chaine = "Hello World"
print(chaine.index("e"))

Sortie console :
1

Si l'on met "He" comme argument, c'est l'index 0 qui va sortir. C'est la première lettre qui fait fois.

chaine = "Hello World"
print(chaine.index("He"))

Sortie console :
0

Le second argument, soit l'index de départ, peut être utile si le caractère recherché apparaît plusieurs fois.

chaine = "Hello World"
print(chaine.index("o",5))

Sortie console :
5

Il est aussi possible de le faire avec un mot.

chaine = "Hello World"
print(chaine.index("World"))

Sortie console :
1

Si l'on chercher quelque chose qui n'existe pas, in error va s'afficher.

chaine = "Hello World"
print(chaine.index("z"))

Sortie console :
print(chaine.index("z"))
          ^^^^^^^^^^^^^^^^^
ValueError: substring not found

La méthode count()

La méthode count() permet de compter le nombre de fois qu'un caractère apparaît dans une chaîne. Cela peut permettre d'éviter les erreurs si c'est combiné avec un if.

chaine = "Hello World"
lettre = "z"
if chaine.count(lettre) != 0:
	print(chaine.count(lettre))
else:
	print(f"La lettre '{lettre}' n'est pas présente dans la chaîne.")

Sortie console :
La lettre 'z' n'est pas présente dans la chaîne.
chaine = "Hello World"
lettre = "l"
if chaine.count(lettre) != 0:
	print(chaine.count(lettre))
else:
	print(f"La lettre '{lettre}' n'est pas présente dans la chaîne.")

Sortie console :
3

La méthode find()

Si la méthode find() ne trouve rien, alors la console affichera un -1.

chaine = "Hello World"
lettre = "z"
print(chaine.find(lettre))

Sortie console :
-1

Il est également possible de combiner la recherche de caractère avec un index de départ. Dans le cas d'une recherche fructueuse, le numéro d'index sera affiché.

chaine = "Hello World"
lettre = "l"
print(chaine.find(lettre,5))

Sortie console :
9

Chercher au début et à la fin d'une chaîne

A l'aide de différente méthode, il est possible de rechercher dans une chaîne si elle commence ou fini par un caractère ou une suite de caractères.

La méthode startswith()

La méthode startswith va renvoyer une valeur boolean et peut recevoir plusieurs arguments :

Attention :
Cette méthode est sensible à la casse.

chaine = "Le python c'est le top"

print(chaine.startswith("Le"))

Sortie console :
True

En incluant les arguments index de départ et index de fin, il est possible de rechercher un élément à une position précise.

Attention :
L'index de départ doit au minimum comprendre le premier caractère du string recherché et l'index de fin doit aller au dernier caractère recherché +1.

chaine = "Le python c'est le top"

print(chaine.startswith("python",3,9))

Sortie console :
True

La méthode endswith()

La méthode endswith fonctionne exactement comme la méthode startswith.
Voici un exemple pratique :

fichier = "C:\\image.jpg"

if fichier.endswith("jpg"):
	print("C'est une image JPG")

Sortie console :
C'est une image JPG

Ajouter des zéros devant une chaîne

Ajouter des zéros dans une chaîne, ça s'appelle :
Bourrage de zéros
En anglais :
Zero garbage

La méthode zfill()

C'est la méthode zfill() qui va permettre d'ajouter des zéros dans une chaîne. Cela peut être utile pour renommer des fichiers rapidement comme des images et qu'elles aient toutes le même nombre de chiffre. De cette manière, le résultat sera aligné.

for i in range(200):
print(str(i).zfill(3) + "_picture.jpg")

Sortie console : 
009_picture.jpg
090_picture.jpg
190_picture.jpg

Découvrir le mot clé "is"

La première fonction du mot clé is est de vérifier si des objets sont les mêmes. Il vérifie si le contenu est identique mais également le nom.

Cas 1 :
liste1 = [2,6,7,5,6,44]
liste2 = liste1

print(liste1 is liste2)

Sortie console :
True
Cas 2 :
liste1 = [2,6,7,5,6,44]
liste2 = [2,6,7,5,6,44]

print(liste1 is liste2)

Sortie console :
False

Le cas 2 ci-dessus renvoie False car Liste1 n'est pas le même objet que liste2.
Pour tester l'égalité, il faut utiliser le double symbole =.

 Cas 3 :
liste1 = [2,6,7,5,6,44]
liste2 = [2,6,7,5,6,44]

print(liste1 == liste2)

Sortie console :
True

Le mot clé is peut être utilisé pour tester si une variable est numérique, en minuscule ou majuscule par exemple.

chaine = "python"

print(chaine.isnumeric())
print(chaine.islower())
print(chaine.isupper())

Sortie console :
False
True
False

Formater une chaîne avec les f-string

Le formatage avec les Fstrings

Les Fstrings sont arrivées avec Python 3.6. Cette fonction est donc relativement nouvelle. Elle permette de formater beaucoup plus facilement et rapidement des chaînes de caractères.

nom = "Parein"
prenom = "Jean-Philippe"
		
chaine = "Je me nomme "+ nom+", mon prénom est "+ prenom
print(chaine)

Sortie console :
Je me nomme Parein, mon prénom est Jean-Philippe

Ici, l'utilisation de virgules pour concaténer générerait des Tuples. L'inconvénient du symbole "+" est qu'il faut penser à mettre l'espace au bon endroit.
Avec la Fstring, tout est beaucoup plus facile. Il faut commencer avec le f, puis ouvrir les guillemets et les variables doivent être mises entre { et }. Il faut fermer les guillemets à la fin de la Fstring.

nom = "Parein"
prenom = "Jean-Philippe"

chaine = f"Je me nomme {nom}, mon prénom est {prenom}."
print(chaine)

Sortie console :
Je me nomme Parein, mon prénom est Jean-Philippe.

Il est bien entendu possible de le faire également avec des nombres.

nb = 244

chaine = f"nb est égal à {nb}."
print(chaine)

Sortie console :
nb est égal à 244.

Le débogage avec les Fstrings

La Fstring peut permettre de déboguer son code. Pour ce faire, il faut ajouter le symbole après la variable.

nom = "Parein"
nb = 244

chaine = f"{nb=} {nom=}"
print(chaine)

Sortie console :
nb=244 nom='Parein'

Le calcul avec les Fstrings

Il est aussi possible de faire des calcul dans une Fstring.

nb = 244

chaine = f"Le nombre {nb} x 2 est égal à {nb*2}."
print(chaine)

Sortie console :
Le nombre 244 x 2 est égal à 488.

Utiliser des méthodes dans des Fstrings

Il est possible d'utiliser des méthodes pour aider au formatage dans une Fstring.

nom = "Parein"
prenom = "jean-philippe"

chaine = f"Je me nomme {nom.upper()}, mon prénom est {prenom.title()}."
print(chaine)

Sortie console :
Je me nomme PAREIN, mon prénom est Jean-Philippe.

Formater une chaîne avec la méthode format

Astuce :
La méthode format est disponible que dans les versions de Python inférieur à 3.6.

nom = "Parein"
prenom = "jean"

chaine = "Je me nomme {}, mon prénom est {}.".format(nom,prenom)

print(chaine)

Sortie console :
Je me nomme Parein, mon prénom est jean.

Il est possible d'utiliser des index pour définir l'emplacement des variables.

nom = "Parein"
prenom = "jean"

chaine = "Je me nomme {1}, mon prénom est {0}.".format(nom,prenom)

print(chaine)

Sortie console :
Je me nomme jean, mon prénom est Parein.

Il est aussi possible de donner des abréviations aux variable pour mieux pouvoir définir leur ordre et rester plus compréhensible que des numéros.

nom = "Parein"
prenom = "jean"

chaine = "Je me nomme {n}, mon prénom est {p}.".format(p=prenom,n=nom)

print(chaine)

Sortie console :
Je me nomme jean, mon prénom est Parein.

Il est aussi possible de faire des opérations mathématiques avec la méthode format.

nb = 233

chaine = "J'ai {montant} Euros.".format(montant=nb*2)

Sortie console :
J'ai 466 Euros.

Il est aussi possible d'utiliser des méthodes.

prenom = "jean"

chaine = "Je me prénomme {}.".format(prenom.upper())

print(chaine)

Sortie console :
Je me prénomme JEAN.