HOWTO · Python

Remplacer le caractère dans une chaîne en Python

Apprenez à remplacer un caractère selon sa position ou à remplacer les caractères correspondants dans une chaîne Python.

Sur cette page

Les chaînes Python sont immuables : vous ne pouvez donc pas remplacer directement un caractère dans une chaîne existante. Créez plutôt une nouvelle chaîne à partir de la valeur modifiée. Utilisez une liste pour modifier une position, replace() pour remplacer un texte correspondant, ou le découpage en tranches si la position est déjà connue. Un bytearray() convient aux données orientées octets, comme l’ASCII, mais ses indices désignent des octets et non des caractères Unicode en général.

Utiliser list() et join() pour remplacer un caractère dans une chaîne

Convertissez la chaîne avec la fonction intégrée list(), remplacez l’élément à son indice à base zéro, puis reconstituez la chaîne. Appelez join() sur une chaîne séparatrice pour combiner les éléments de la liste ; "" n’insère aucun séparateur. Par exemple, l’indice 2 désigne le troisième caractère :

text = "Naze"
characters = list(text)
characters[2] = "m"
updated = "".join(characters)
print(updated)
Name

Cette approche modifie un seul caractère et laisse intacte la valeur de la chaîne d’origine ; updated désigne le nouveau texte obtenu par concaténation. L’indice doit correspondre à un élément de la liste : si la position vient d’une saisie utilisateur, vérifiez la longueur de la chaîne.

Utiliser bytearray() pour remplacer un caractère dans une chaîne

Pour du texte orienté octets, encodez d’abord la chaîne, affectez un entier à l’octet voulu dans un bytearray() mutable, puis décodez les octets pour retrouver une chaîne. Cet exemple utilise l’ASCII, où chaque caractère présenté est représenté par un octet :

text = "Naze"
data = bytearray(text, "ascii")
data[2] = ord("m")
updated = data.decode("ascii")
print(updated)
Name

L’encodage et le décodage doivent utiliser des encodages de caractères compatibles. Un indice d’octet ne correspond généralement pas à un indice de caractère Unicode : en UTF-8, un caractère hors ASCII peut occuper plusieurs octets. N’utilisez cette technique que si l’encodage des données et les positions en octets font partie du problème ; pour du texte ordinaire, préférez les approches qui manipulent des chaînes.

Utiliser la méthode replace() pour remplacer les caractères correspondants dans une chaîne

Appelez la méthode de chaîne replace() en lui passant l’ancien texte et le nouveau. Par défaut, elle remplace chaque occurrence non chevauchante de l’ancien texte et renvoie le résultat sous forme d’une nouvelle chaîne :

text = "Naze"
updated = text.replace("z", "m")
print(updated)
Name

Le text d’origine reste inchangé. Si vous ne voulez remplacer qu’un nombre limité d’occurrences, transmettez ce nombre en troisième argument facultatif, par exemple text.replace("a", "o", 1). Si l’ancien texte est absent, replace() renvoie le texte sans modification ; cela peut aider à distinguer une erreur d’orthographe d’un problème d’affectation.

Utiliser le découpage en tranches et la concaténation pour remplacer un caractère à une position connue

Lorsque vous connaissez la position à base zéro, prenez le préfixe qui la précède, ajoutez le caractère de remplacement, puis ajoutez le suffixe qui la suit. La tranche text[:2] conserve les caractères situés avant l’indice 2, tandis que text[3:] commence après ce caractère :

text = "Naze"
updated = text[:2] + "m" + text[3:]
print(updated)
Name

Cette expression construit une nouvelle chaîne tout en conservant le préfixe et le suffixe qui entourent le caractère. Veillez à faire commencer le suffixe une position après le caractère remplacé ; un indice incorrect peut supprimer ou dupliquer un caractère. Choisissez cette forme lorsque la position est déjà connue et que l’expression convient à votre cas d’usage ; aucune comparaison de vitesse n’est faite ici.