Mettre en forme des chaînes de caractères en Python

Dans cette page, vous apprendrez à mettre en forme des chaînes de caractères. Ceci est utile notamment pour l’affichage des nombres. Par exemple, si vous voulez afficher un montant en euros avec deux chiffres après la virgule.

Cette page pour sa partie qui utilise format est inspirée par les sites https://pyformat.info/ et https://python.sdv.univ-paris-diderot.fr/03_affichage/.

Exemple

[1]:
valeur = 21
print(f"Le prix est {valeur:.2f} euros")
Le prix est 21.00 euros

Comment préciser la mise en forme en utilisant une f-string ?

A partir de Python 3.6, il est possible d’effectuer la mise en forme d’une chaîne de caractères en utilisant une f-string.

Dans un premier exemple, nous allons chercher à afficher la valeur d’une variable au sein d’une chaîne de caractères.

Pour créer une f-string, on indique un caractère f juste avant la chaîne de caractères.

On précise la position où doit apparaître la valeur grâce à des accolades {}.

Exemple

[2]:
a = 5
print(f"La valeur est {a} et nous l'avons affichée")
La valeur est 5 et nous l'avons affichée

Il est possible d’afficher plusieurs variables :

[3]:
b = 8
print(f"Les valeurs sont {a} et {b}")
Les valeurs sont 5 et 8

Si on souhaite préciser un format pour la chaîne produite, on utilise : suivi des paramètres de formatage.

Par exemple, il est possible d’indiquer un nombre entier qui précise la largeur à utiliser pour afficher la valeur transmise. Il y aura ainsi au sein de la chaîne produite un nombre de caractères fixé pour afficher la valeur. Si la valeur à une longueur trop petite, des espaces seront ajoutés pour arriver à la largeur voulue.

Exemple

[4]:
print(f"Les valeurs sont {a:10} et {b:10}")
Les valeurs sont          5 et          8

Ici les valeurs de a et b sont affichées en occupant 10 caractères chacune.

Pour bien comprendre cela, nous allons générer la chaîne de caractères correspondante et vérifier que sa longueur est bien 10.

[5]:
t = f"{a:10}"
type(t)
[5]:
str

Nous voyons donc que l’instruction f"{a:10}" a bien renvoyé une chaîne de caractères.

[6]:
len(t)
[6]:
10

Ceci confirme que la chaîne contenue dans t est constituée de 10 caractères.

Alignement

Il est possible d’aligner à gauche en utilisant le signe inférieur <.

[7]:
print(f"Les valeurs sont {a:<10} et {b:<10}")
Les valeurs sont 5          et 8

Pour centrer, on utilise le caractère ^.

[8]:
print(f"Les valeurs sont {a:^10} et {b:^10}")
Les valeurs sont     5      et     8

Formatage d’un nombre à virgule (float)

Si on veut fixer la précision lors de l’affichage d’un nombre, on indique . puis on précise le nombre de chiffres après la virgule suivi du caractère f.

Il est possible d’indiquer :X.YfX précise la longueur de la chaîne de caractères produite et Y le nombre de chiffres après la virgule.

[9]:
c = 123.12345
print(f"La valeur est {c}")
print(f"La valeur formatée est {c:10.2f}")
La valeur est 123.12345
La valeur formatée est     123.12

Si on n’indique pas de valeur pour X entre les deux-points : et le point ., la longueur de la chaîne s’adapte au nombre de caractères à afficher. On utilise alors seulement Y pour préciser le nombre de chiffres après la virgule en indiquant :.Yf.

[10]:
print(f"La valeur formatée est {c:.2f}")
La valeur formatée est 123.12

Il est également possible d’aligner à gauche ou de centrer avec les caractères < et ^ comme précédemment.

[11]:
print(f"Les valeurs sont {c:<10.2f} et {c:^10.2f} avec alignement")
Les valeurs sont 123.12     et   123.12   avec alignement

Pour aller plus loin, vous pouvez par exemple consulter le site suivant : https://he-arc.github.io/livre-python/fstrings/index.html.

Comment préciser la mise en forme avec format ?

Pour préciser la mise en forme d’une chaîne de caractères, on peut également utiliser la méthode format().

Dans un premier exemple, nous allons chercher à afficher la valeur d’une variable au sein d’une chaîne de caractères. On précise la position où doit apparaître la valeur grâce à des accolades {} et on indique la variable comme argument de la méthode format().

Exemple

[12]:
a = 5
print( "La valeur est {} et nous l'avons affichée".format(a) )
La valeur est 5 et nous l'avons affichée

Il est possible d’afficher plusieurs variables :

[13]:
b = 8
print( "Les valeurs sont {} et {}".format(a, b) )
Les valeurs sont 5 et 8

Si on souhaite préciser un format pour la chaîne produite, on utilise : suivi des paramètres de formatage.

Par exemple, il est possible d’indiquer un nombre entier qui précise le nombre de caractères de la chaîne utilisée pour afficher la valeur transmise à format.

Exemple

[14]:
print( "Les valeurs sont {:10} et {:10}".format(a, b) )
Les valeurs sont          5 et          8

Ici la valeur de a est affichée en occupant 10 caractères.

Pour bien comprendre cela, nous allons générer la chaîne de caractères correspondante et vérifier que sa longueur est bien 10.

[15]:
t = "{:10}".format(5)
type(t)
[15]:
str

Nous voyons donc que l’instruction "{:10}".format(5) a bien renvoyé une chaîne de caractères.

[16]:
len(t)
[16]:
10

Ceci confirme que la chaîne contenue dans t est constituée de 10 caractères.

Alignement

Il est possible d’aligner à gauche en utilisant le signe inférieur <.

[17]:
print( "Les valeurs sont {:<10} et {:<10}".format(a, b) )
Les valeurs sont 5          et 8

Pour centrer, on utilise le caractère ^.

[18]:
print( "Les valeurs sont {:^10} et {:^10}".format(a, b) )
Les valeurs sont     5      et     8

Formatage d’un nombre à virgule (float)

Si on veut formater l’affichage d’un nombre à virgule (float), on utilise le caractère f dans l’accolade.

Il est possible d’indiquer :X.YfX précise la longueur de la chaîne de caractères produite et Y le nombre de chiffres après la virgule.

[19]:
print( "La valeur est {}".format(123.12345) )
print( "La valeur formatée est {:10.2f}".format(123.12345) )
La valeur est 123.12345
La valeur formatée est     123.12

Si on n’indique pas de valeur pour X entre les deux-points : et le point ., la longueur de la chaîne s’adapte au nombre de caractères à afficher. On utilise alors seulement Y pour préciser le nombre de chiffres après la virgule en indiquant :.Yf.

[20]:
print( "La valeur formatée est {:.2f}".format(123.12345) )
La valeur formatée est 123.12

Il est également possible d’aligner à gauche ou de centrer avec les caractères < et ^ comme précédemment.

[21]:
print("Les valeurs sont {:<10.2f} et {:^10.2f} avec alignement".format(123.12345, 123.12345) )
Les valeurs sont 123.12     et   123.12   avec alignement