Manipuler les chaînes de caractères en Python
En Python, une chaîne de caractères (str) est une suite de symboles : lettres, chiffres, espaces, ponctuation. C’est le type que vous manipulez dès que vous traitez du texte — un nom d’utilisateur, un fichier CSV, une réponse d’API. La bonne nouvelle, c’est que Python offre une panoplie de méthodes très lisibles pour transformer ce texte.
Point crucial à garder en tête : une chaîne est immuable. Aucune méthode ne modifie la chaîne d’origine ; elles renvoient toujours une nouvelle chaîne. Il faut donc récupérer le résultat dans une variable.
Ce guide passe en revue, opération par opération, tout ce que vous ferez couramment avec du texte, avec un exemple exécutable à chaque fois.
Créer une chaîne
On délimite une chaîne par des guillemets simples ou doubles, indifféremment. Les triples guillemets permettent d’écrire sur plusieurs lignes.
simple = 'Bonjour'
double = "Bonjour"
multi = """Première ligne
Deuxième ligne"""
print(multi)
Pour insérer un guillemet dans la chaîne, choisissez l’autre type de délimiteur ou échappez-le avec \.
phrase = "Il a dit \"oui\""
autre = 'Il a dit "oui"'
Concaténer des chaînes
Avec l’opérateur +
L’opérateur + colle deux chaînes bout à bout. Attention, il n’accepte que des chaînes : un nombre doit être converti avec str().
prenom = "Marie"
nom = "Curie"
complet = prenom + " " + nom
print(complet) # Marie Curie
age = 55
message = "Âge : " + str(age)
Répéter avec *
L’opérateur * répète une chaîne un nombre donné de fois.
ligne = "-" * 20
print(ligne) # --------------------
Assembler une liste avec join()
Pour concaténer les éléments d’une liste, join() est bien plus efficace que d’enchaîner des +. La chaîne sur laquelle on l’appelle sert de séparateur.
mots = ["Python", "est", "génial"]
print(" ".join(mots)) # Python est génial
print("-".join(mots)) # Python-est-génial
Formater avec les f-strings
Les f-strings (préfixe f) sont la façon moderne et recommandée d’insérer des variables dans du texte. On place les expressions entre accolades.
nom = "Ada"
age = 36
print(f"{nom} a {age} ans") # Ada a 36 ans
Calculs et formats dans l’accolade
Une f-string évalue n’importe quelle expression, et accepte des spécificateurs de format après deux-points.
prix = 19.9
tva = 0.20
print(f"TTC : {prix * (1 + tva):.2f} €") # TTC : 23.88 €
print(f"{1000000:,}".replace(",", " ")) # 1 000 000
Aligner et remplir
for i in range(1, 4):
print(f"{i:03d}") # 001, 002, 003
print(f"{'gauche':<10}|") # gauche |
print(f"{'droite':>10}|") # droite|
Les méthodes de transformation
Changer la casse
texte = "bonjour le monde"
print(texte.upper()) # BONJOUR LE MONDE
print(texte.title()) # Bonjour Le Monde
print(texte.capitalize()) # Bonjour le monde
print("CRIER".lower()) # crier
Nettoyer les espaces avec strip()
strip() retire les espaces (et retours à la ligne) en début et fin de chaîne. lstrip() et rstrip() ne traitent qu’un seul côté.
saisie = " [email protected] \n"
print(saisie.strip()) # '[email protected]'
On peut aussi retirer des caractères précis en les passant en argument.
print("###titre###".strip("#")) # titre
Remplacer avec replace()
replace() remplace toutes les occurrences d’un fragment par un autre.
texte = "chat, chat, chat"
print(texte.replace("chat", "chien")) # chien, chien, chien
print(texte.replace("chat", "chien", 1)) # chien, chat, chat
Découper une chaîne
split() : diviser en liste
split() découpe la chaîne selon un séparateur et renvoie une liste. Sans argument, il découpe sur les espaces (et ignore les espaces multiples).
csv = "nom;prenom;age"
print(csv.split(";")) # ['nom', 'prenom', 'age']
phrase = "un deux trois"
print(phrase.split()) # ['un', 'deux', 'trois']
splitlines() : découper par ligne
bloc = "ligne 1\nligne 2\nligne 3"
print(bloc.splitlines()) # ['ligne 1', 'ligne 2', 'ligne 3']
partition() : couper en trois
partition() découpe à la première occurrence du séparateur et renvoie un tuple (avant, séparateur, après).
email = "[email protected]"
print(email.partition("@")) # ('utilisateur', '@', 'domaine.fr')
Rechercher dans une chaîne
Tester la présence avec in
L’opérateur in répond par un booléen. C’est le test le plus simple et le plus lisible.
phrase = "le renard brun"
print("renard" in phrase) # True
print("loup" in phrase) # False
Localiser avec find() et index()
find() renvoie la position de la première occurrence, ou -1 si absente. index() fait pareil mais lève une ValueError en cas d’absence.
phrase = "le renard brun"
print(phrase.find("renard")) # 3
print(phrase.find("loup")) # -1
Tester le début et la fin
startswith() et endswith() sont parfaits pour filtrer selon un préfixe ou une extension.
fichier = "rapport.pdf"
print(fichier.endswith(".pdf")) # True
print(fichier.startswith("rap")) # True
Compter les occurrences
print("banane".count("a")) # 3
Le slicing : extraire une portion
Le slicing extrait une sous-chaîne avec la syntaxe chaine[début:fin:pas]. La borne de fin est exclue.
mot = "développeur"
print(mot[0]) # d (premier caractère)
print(mot[0:4]) # déve
print(mot[4:]) # loppeur
print(mot[-1]) # r (dernier caractère)
print(mot[-4:]) # eur
Inverser une chaîne
Un pas négatif de -1 parcourt la chaîne à l’envers.
print("bonjour"[::-1]) # ruojnob
Un caractère sur deux
print("abcdefgh"[::2]) # aceg
Tester le contenu d’une chaîne
Ces méthodes renvoient un booléen selon la nature des caractères. Elles sont pratiques pour valider une saisie.
print("12345".isdigit()) # True : que des chiffres
print("Python3".isalnum()) # True : lettres et chiffres
print("hello".isalpha()) # True : que des lettres
print(" ".isspace()) # True : que des espaces
print("MOT".isupper()) # True : tout en majuscules
Exemple de validation d’un âge saisi au clavier :
saisie = "42"
if saisie.isdigit():
age = int(saisie)
print(f"Âge valide : {age}")
else:
print("Veuillez entrer un nombre")
Encodage et décodage
Une chaîne (str) est une suite de caractères ; un fichier ou le réseau manipulent des octets (bytes). encode() transforme une chaîne en octets selon un encodage (UTF-8 par défaut), et decode() fait l’inverse.
texte = "café"
octets = texte.encode("utf-8")
print(octets) # b'caf\xc3\xa9'
retour = octets.decode("utf-8")
print(retour) # café
L’UTF-8 code les caractères accentués sur plusieurs octets : c’est pourquoi "café" occupe 5 octets pour 4 caractères. Utilisez toujours UTF-8 pour lire et écrire des fichiers texte afin d’éviter les caractères illisibles.
with open("notes.txt", "w", encoding="utf-8") as f:
f.write("Résumé : préférence à l'été")
En résumé
Manipuler du texte en Python repose sur quelques réflexes : les f-strings pour assembler et formater, split() / join() pour passer d’une chaîne à une liste et inversement, strip() et replace() pour nettoyer, le slicing pour extraire, et in / startswith() pour rechercher. Gardez toujours en tête l’immuabilité : récupérez le résultat de chaque méthode dans une variable. Avec ces outils, le traitement de chaînes devient rapide et lisible.