HOWTO · Python

Supprimer les zéros non significatifs dans la chaîne Python

Ce tutoriel explique comment supprimer les zéros non significatifs dans une chaîne en Python

Sur cette page

Les chaînes Python conservent leurs caractères à l’identique, y compris les zéros initiaux. Pour supprimer ces zéros tout en gardant chaque valeur sous forme de chaîne, appelez lstrip("0"). Convertissez une valeur en entier uniquement si elle est numérique et si la perte de son format d’origine est acceptable. Les exemples ci-dessous montrent la méthode directe, son application à une liste et la façon de choisir une autre méthode.

Supprimer les zéros initiaux d’une chaîne avec lstrip()

La méthode lstrip() renvoie une nouvelle chaîne après avoir supprimé des caractères à son début. En lui passant "0", vous lui demandez de supprimer tous les zéros consécutifs au début ; les zéros situés ailleurs dans la chaîne restent inchangés. La valeur d’origine ne change pas, car les chaînes Python sont immuables.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

values = ["0001234", "01000", "1000"]
cleaned = [value.lstrip("0") for value in values]
print(cleaned)
['1234', '1000', '1000']

Par exemple, "0001200".lstrip("0") donne "1200" : les zéros après 12 restent présents. lstrip("0") supprime les caractères appartenant à l’ensemble fourni, et non une sous-chaîne fixe au début. Utilisez cette méthode lorsque vous souhaitez supprimer toute suite de zéros initiaux.

Appliquer l’opération à une liste de chaînes

La compréhension de liste ci-dessus applique la même transformation indépendamment à chaque valeur et conserve l’ordre de la liste. Elle renvoie également des chaînes, ce qui est important pour des identifiants tels que les codes postaux, les numéros de compte et les codes dont le format a du sens. En affectant le résultat à une nouvelle variable, vous gardez la liste d’entrée ; pour remplacer son contenu, affectez la compréhension à cette même variable.

Utilisez value.lstrip("0") pour chaque élément lorsque toutes les valeurs sont des chaînes et que seuls leurs zéros initiaux doivent être supprimés. Si les valeurs proviennent d’un fichier ou d’une autre source, ne les convertissez en chaînes que si cela correspond au modèle de données : convertir des valeurs arbitraires peut masquer des problèmes dans les données d’entrée.

Choisir une méthode en fonction des données

Pour nettoyer une chaîne ordinaire, lstrip("0") est concis et conserve les caractères intérieurs. Une boucle qui utilise startswith() et le découpage en tranches constitue une autre option lorsque la condition de suppression doit suivre une logique personnalisée. La condition fonctionne sans risque avec une chaîne vide ; en la répétant, chaque zéro initial est supprimé tandis que les zéros intérieurs sont conservés :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

value = "0001200"
while value.startswith("0"):
    value = value[1:]
print(value)

Avec cette entrée, la boucle renvoie "1200". Si l’entrée ne contient que des zéros, par exemple "000", elle devient une chaîne vide, conformément à la règle qui consiste à supprimer tous les zéros initiaux.

Pour les chaînes qui ne contiennent que des nombres, str(int(value)) offre une conversion courte. La valeur est convertie en entier, puis de nouveau en chaîne : son format, notamment les signes plus et les zéros initiaux, est donc perdu, et le texte non numérique ne peut pas être conservé. Cette méthode ne convient pas aux identifiants ni aux chaînes qui ne représentent pas forcément des entiers valides. Une expression régulière telle que re.sub(r"^0+", "", value) permet d’exprimer la même correspondance avec les zéros au début ; elle nécessite l’importation de re et apporte peu pour une opération aussi simple.

Gérer les chaînes vides et celles composées uniquement de zéros

Appeler lstrip("0") sur "" renvoie "". L’appeler sur "000" renvoie également "", car tous les caractères ont été supprimés. C’est le résultat naturel de la suppression de tous les zéros initiaux, mais certaines applications doivent représenter un nombre composé uniquement de zéros par "0". Dans ce cas, appliquez explicitement cette règle, par exemple avec value.lstrip("0") or "0", si l’entrée est connue pour représenter un nombre. N’appliquez pas cette solution de remplacement sans discernement à du texte arbitraire : elle changerait le sens d’une valeur initialement vide.

Tester le résultat

Vérifiez plusieurs entrées représentatives et le résultat attendu pour chacune : "0001234" devient "1234", "01000" devient "1000" et "1000" reste "1000". Avant de traiter des données réelles, déterminez également le résultat attendu par votre application pour "" et "000". Lorsque le maintien du type chaîne est important, vérifiez que les valeurs transformées sont toujours des chaînes et que les zéros intérieurs sont conservés. Ces vérifications permettent de distinguer la suppression d’un préfixe de la conversion de la valeur en nombre.