Les chaînes de caractères, appelées strings en anglais, sont l'un des types de données les plus utilisés en Python. Que vous souhaitiez afficher un message à l'écran avec print, stocker un nom d'utilisateur ou manipuler du texte, vous travaillerez constamment avec des strings. Si vous souhaitez maîtriser Python en profondeur, notre formation complète sur Python vous guidera pas à pas dans l'apprentissage de ce langage, y compris la manipulation avancée des chaînes de caractères.
Définition d'un string en Python
Un string (ou str) est une séquence ordonnée et immuable de caractères Unicode. En Python, un string est un objet de type str qui peut contenir des lettres, des chiffres, des symboles, des espaces et même des caractères spéciaux. L'immuabilité signifie qu'une fois créé, un string ne peut pas être modifié directement : toute opération de transformation renvoie un nouveau string.
En Python 3, tous les strings sont encodés en Unicode par défaut, ce qui permet de gérer nativement les caractères accentués, les emojis et les alphabets non latins.
Vous pouvez créer un string de plusieurs façons :
# Avec des guillemets simples
nom = 'Alice'
# Avec des guillemets doubles
message = "Bonjour le monde"
# Avec des triples guillemets (pour les strings multilignes)
description = """Ceci est
un string
sur plusieurs lignes"""
# Avec des triples guillemets simples
autre_description = '''Ceci fonctionne
également sur
plusieurs lignes'''
Les guillemets simples et doubles sont fonctionnellement identiques. Le choix dépend souvent du contenu : si votre texte contient une apostrophe, utilisez des guillemets doubles, et inversement.
# Apostrophe dans le texte : guillemets doubles recommandés
phrase = "L'apprentissage de Python est passionnant"
# Guillemets dans le texte : guillemets simples recommandés
citation = 'Il a dit "bonjour" en entrant'
Les opérations de base sur les strings
Concaténation et répétition
Python permet de combiner des strings avec l'opérateur + (concaténation) et de les répéter avec l'opérateur * :
# Concaténation
prenom = "Jean"
nom = "Dupont"
nom_complet = prenom + " " + nom
print(nom_complet) # Jean Dupont
# Répétition
separateur = "-" * 30
print(separateur) # ------------------------------
# Concaténation avec +=
salutation = "Bonjour"
salutation += " tout le monde !"
print(salutation) # Bonjour tout le monde !
Accéder aux caractères : indexation et slicing
Chaque caractère d'un string possède un index, commençant à 0 pour le premier caractère. Python supporte également l'indexation négative, où -1 désigne le dernier caractère :
mot = "Python"
# Indexation positive
print(mot[0]) # P
print(mot[1]) # y
print(mot[5]) # n
# Indexation négative
print(mot[-1]) # n
print(mot[-2]) # o
# Slicing (extraction de sous-chaînes)
print(mot[0:3]) # Pyt
print(mot[2:]) # thon
print(mot[:4]) # Pyth
print(mot[::2]) # Pto (un caractère sur deux)
print(mot[::-1]) # nohtyP (string inversé)
Attention : tenter d'accéder à un index qui dépasse la longueur du string provoque une erreur IndexError. Utilisez la fonction len pour vérifier la taille d'un string avant d'y accéder.
Longueur d'un string
La fonction intégrée len retourne le nombre de caractères d'un string :
texte = "Bonjour Python"
print(len(texte)) # 14
# Les espaces comptent comme des caractères
print(len(" ")) # 1
# Un string vide a une longueur de 0
print(len("")) # 0
Les méthodes essentielles des strings
Python fournit un grand nombre de méthodes intégrées pour manipuler les strings. Voici les plus courantes, regroupées par catégorie :
Transformation de casse
| Méthode | Description | Exemple | Résultat |
|---|---|---|---|
.upper() | Convertit en majuscules | "python".upper() | "PYTHON" |
.lower() | Convertit en minuscules | "PYTHON".lower() | "python" |
.capitalize() | Première lettre en majuscule | "python".capitalize() | "Python" |
.title() | Première lettre de chaque mot en majuscule | "bonjour le monde".title() | "Bonjour Le Monde" |
.swapcase() | Inverse la casse | "PyThOn".swapcase() | "pYtHoN" |
email = " Utilisateur@Example.COM "
# Normaliser un email
email_normalise = email.strip().lower()
print(email_normalise) # utilisateur@example.com
Recherche et vérification
phrase = "Python est un langage de programmation puissant"
# Vérifier la présence d'un mot
print("Python" in phrase) # True
print("Java" in phrase) # False
# Trouver la position d'un sous-string
print(phrase.find("langage")) # 15
print(phrase.find("Java")) # -1 (non trouvé)
# index() lève une exception si non trouvé
# print(phrase.index("Java")) # ValueError
# Compter les occurrences
texte = "abracadabra"
print(texte.count("a")) # 5
# Vérifications de début et fin
fichier = "rapport_2024.pdf"
print(fichier.startswith("rapport")) # True
print(fichier.endswith(".pdf")) # True
Méthodes de test
Python offre plusieurs méthodes pour tester la nature des caractères contenus dans un string :
# Vérifier le type de contenu
print("12345".isdigit()) # True
print("abc".isalpha()) # True
print("abc123".isalnum()) # True
print(" ".isspace()) # True
print("Bonjour".istitle()) # True
print("PYTHON".isupper()) # True
print("python".islower()) # True
Nettoyage et remplacement
# Supprimer les espaces inutiles
texte = " Bonjour Python "
print(texte.strip()) # "Bonjour Python"
print(texte.lstrip()) # "Bonjour Python "
print(texte.rstrip()) # " Bonjour Python"
# Remplacer des sous-chaînes
phrase = "J'aime le Java, le Java est génial"
nouvelle = phrase.replace("Java", "Python")
print(nouvelle) # J'aime le Python, le Python est génial
# Remplacer seulement la première occurrence
nouvelle = phrase.replace("Java", "Python", 1)
print(nouvelle) # J'aime le Python, le Java est génial
Découpage et jonction
Les méthodes split() et join() sont fondamentales pour convertir entre des strings et des list :
# Découper un string en liste
phrase = "Python est fantastique"
mots = phrase.split()
print(mots) # ['Python', 'est', 'fantastique']
# Découper avec un séparateur personnalisé
csv_ligne = "Alice,30,Paris,Développeuse"
valeurs = csv_ligne.split(",")
print(valeurs) # ['Alice', '30', 'Paris', 'Développeuse']
# Joindre une liste en string
mots = ['Python', 'est', 'génial']
resultat = " ".join(mots)
print(resultat) # Python est génial
# Joindre avec un autre séparateur
chemin = "/".join(["home", "user", "documents"])
print(chemin) # home/user/documents
Le formatage des strings
Le formatage permet d'insérer dynamiquement des valeurs dans un string. Python propose plusieurs approches, mais les f-string sont la méthode recommandée depuis Python 3.6.
Les f-strings (méthode recommandée)
nom = "Alice"
age = 30
ville = "Paris"
# F-string basique
print(f"Je m'appelle {nom} et j'ai {age} ans.")
# Je m'appelle Alice et j'ai 30 ans.
# Expressions dans les f-strings
print(f"Dans 5 ans, j'aurai {age + 5} ans.")
# Dans 5 ans, j'aurai 35 ans.
# Appels de méthodes
print(f"Mon nom en majuscules : {nom.upper()}")
# Mon nom en majuscules : ALICE
# Formatage de nombres
prix = 49.99
print(f"Prix : {prix:.2f} €") # Prix : 49.99 €
print(f"Prix : {prix:>10.2f} €") # Prix : 49.99 €
grand_nombre = 1000000
print(f"Population : {grand_nombre:,}") # Population : 1,000,000
La méthode format()
# Positional arguments
print("Je m'appelle {} et j'ai {} ans.".format("Alice", 30))
# Named arguments
print("Je m'appelle {nom} et j'habite à {ville}.".format(nom="Alice", ville="Paris"))
# Index arguments
print("{0} aime {1}, mais {1} n'aime pas {0}.".format("Alice", "Bob"))
L'opérateur % (ancienne méthode)
# Ancienne méthode avec l'opérateur %
nom = "Alice"
age = 30
print("Je m'appelle %s et j'ai %d ans." % (nom, age))
Les f-string sont non seulement plus lisibles, mais aussi plus performantes que les autres méthodes de formatage. Privilégiez-les systématiquement dans vos projets Python modernes.
Les caractères d'échappement
Les caractères d'échappement permettent d'insérer des caractères spéciaux dans un string à l'aide du backslash \ :
| Séquence | Description |
|---|---|
\n | Nouvelle ligne |
\t | Tabulation |
\\ | Backslash littéral |
\' | Guillemet simple |
\" | Guillemet double |
\0 | Caractère null |
\u | Caractère Unicode (ex: \u00E9 pour é) |
# Exemples de caractères d'échappement
print("Première ligne\nDeuxième ligne")
# Première ligne
# Deuxième ligne
print("Nom\tPrénom\tÂge")
# Nom Prénom Âge
print("Il a dit \"bonjour\"")
# Il a dit "bonjour"
# Raw strings : désactivent les caractères d'échappement
chemin = r"C:\Users\nom\documents"
print(chemin) # C:\Users\nom\documents
Les strings et l'itération
Un string étant une séquence, vous pouvez le parcourir caractère par caractère, ou utiliser des fonctions comme enumerate pour obtenir simultanément l'index et le caractère :
mot = "Python"
# Parcourir chaque caractère
for caractere in mot:
print(caractere, end=" ")
# P y t h o n
print() # Retour à la ligne
# Avec enumerate pour avoir l'index
for index, caractere in enumerate(mot):
print(f"Index {index} : {caractere}")
# Index 0 : P
# Index 1 : y
# Index 2 : t
# Index 3 : h
# Index 4 : o
# Index 5 : n
Vous pouvez également utiliser des list comprehensions pour transformer chaque caractère d'un string :
mot = "Python"
# Créer une liste des codes Unicode de chaque caractère
codes = [ord(c) for c in mot]
print(codes) # [80, 121, 116, 104, 111, 110]
# Filtrer certains caractères
voyelles = [c for c in mot if c.lower() in 'aeiouy']
print(voyelles) # ['y', 'o']
Conversion vers et depuis les strings
Python facilite la conversion entre les strings et d'autres types de données :
# Convertir en string
nombre = 42
flottant = 3.14
ma_liste = [1, 2, 3]
print(str(nombre)) # "42"
print(str(flottant)) # "3.14"
print(str(ma_liste)) # "[1, 2, 3]"
# Convertir depuis un string
print(int("42")) # 42
print(float("3.14")) # 3.14
# Convertir un string en liste de caractères
caracteres = list("Python")
print(caracteres) # ['P', 'y', 't', 'h', 'o', 'n']
# Convertir un string en tuple
t = tuple("Python")
print(t) # ('P', 'y', 't', 'h', 'o', 'n')
Soyez prudent lors de la conversion d'un string en nombre. Si le string ne contient pas une valeur numérique valide, Python lèvera une exception ValueError. Utilisez un bloc try/except pour gérer ces cas.
Les strings multilignes et les docstrings
Les triples guillemets permettent de créer des strings sur plusieurs lignes. Ils sont aussi utilisés pour les docstring, qui documentent les fonctions, classes et modules :
def calculer_aire(longueur, largeur):
"""Calcule l'aire d'un rectangle.
Args:
longueur: La longueur du rectangle.
largeur: La largeur du rectangle.
Returns:
L'aire du rectangle (longueur * largeur).
"""
return longueur * largeur
# Accéder à la docstring
print(calculer_aire.__doc__)
Bonnes pratiques avec les strings en Python
1. Utilisez les f-strings pour le formatage : les f-string sont la méthode la plus lisible et la plus performante. Évitez l'opérateur % dans du code moderne.
2. Utilisez join() pour concaténer plusieurs strings : la concaténation avec + dans une boucle crée de nombreux objets intermédiaires. Utilisez plutôt "".join() :
# ❌ Inefficace
resultat = ""
for mot in ["Python", "est", "génial"]:
resultat += mot + " "
# ✅ Efficace
resultat = " ".join(["Python", "est", "génial"])
3. Utilisez in pour vérifier la présence d'un sous-string : c'est plus lisible que d'utiliser find() pour un simple test de présence.
# ❌ Moins lisible
if phrase.find("Python") != -1:
print("Trouvé")
# ✅ Plus lisible
if "Python" in phrase:
print("Trouvé")
4. Normalisez les strings pour les comparaisons : utilisez .lower() ou .casefold() pour des comparaisons insensibles à la casse :
entree_utilisateur = "Python"
if entree_utilisateur.lower() == "python":
print("Correspondance trouvée !")
# casefold() est plus agressif pour les caractères internationaux
print("straße".casefold()) # strasse
5. N'oubliez pas que les strings sont immuables : chaque modification crée un nouveau string. Si vous devez effectuer de nombreuses modifications, envisagez d'utiliser une list de caractères puis de la joindre.
Questions fréquentes
Quelle est la différence entre les guillemets simples et doubles en Python ?
Il n'y a aucune différence fonctionnelle entre les guillemets simples ('...') et doubles ("...") en Python. Les deux créent un objet str identique. Le choix est une question de style et de praticité : utilisez des guillemets doubles si votre texte contient des apostrophes, et inversement. La convention PEP 8 n'impose pas de préférence, mais la cohérence au sein d'un projet est recommandée.
Les strings sont-ils immuables en Python ?
Oui, les strings sont immuables en Python. Cela signifie que vous ne pouvez pas modifier un caractère à un index donné (par exemple mon_string[0] = "A" provoquera une erreur TypeError). Toute opération qui semble modifier un string (comme replace(), upper(), ou la concaténation) crée en réalité un nouveau string. Cette immuabilité permet aux strings d'être utilisés comme clés dans les dict et comme éléments dans les sets.
Comment convertir un string en nombre en Python ?
Utilisez int() pour convertir en entier et float() pour convertir en nombre à virgule flottante. Par exemple : int("42") retourne 42 et float("3.14") retourne 3.14. Si le string n'est pas un nombre valide, Python lèvera une exception ValueError. Vous pouvez utiliser la méthode .isdigit() pour vérifier au préalable si un string ne contient que des chiffres, ou un bloc try/except pour gérer les erreurs de conversion de manière robuste.
Comment apprendre à manipuler les strings et Python en général ?
La manipulation des strings est une compétence fondamentale en Python. Pour acquérir une maîtrise complète du langage, des bases aux concepts avancés comme les expressions régulières et le traitement de données textuelles, nous vous recommandons de suivre notre formation dédiée à Python sur Believemy. Vous y trouverez des exercices pratiques, des projets concrets et un accompagnement structuré pour progresser efficacement.