Maîtriser la méthode str.format() pour le formatage des chaînes en Python

Introduction au formatage moderne

Depuis la version 2.6 de Python, la méthode str.format() a été introduite pour offrir une alternative puissante et flexible à l'ancien opérateur de formatage %. Cette approche repose sur l'utilisation d'accolades {} comme marqueurs de remplacement et de deux-points : pour définir des spécifications de format précises.

Gestion des arguments positionnels

La méthode format() accepte un nombre varible d'arguments. Contrairement à l'ancien formatage, l'ordre des paramètres peut être contrôlé explicitement via des index numériques, permettant même la réutilisation d'un même argument.

# Séquentiel (ordre par défaut)
print("{} et {}".format("Python", "Rust"))

# Indexation explicite
print("{0} et {1}".format("Python", "Rust"))

# Réutilisation et inversion d'index
print("{1} est plus récent que {0}, mais {0} est très mature".format("Python", "Rust"))

Arguments nommés et structures de données

Il est possible d'utiliser des arguments nommés (mots-clés), de déballer des dictionnaires, ou d'accéder directement aux éléments d'une liste ou aux attributs d'un objet via leurs index ou noms.

# Arguments nommés directs
print("Framework: {framework}, Version: {version}".format(framework="Django", version="4.2"))

# Déballage de dictionnaire
config = {"framework": "Flask", "version": "3.0"}
print("Framework: {framework}, Version: {version}".format(**config))

# Accès aux éléments d'une liste via l'index de l'argument
langages = ["Go", "Kotlin"]
print("Langage 1: {0[0]}, Langage 2: {0[1]}".format(langages))

# Accès aux attributs d'un objet
class Serveur:
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port

noeud = Serveur("192.168.1.50", 8080)
print("Connexion à {0.ip} sur le port {0.port}".format(noeud))

Formatage numérique avancé

Les spécificateurs de format permettent un contrôle granulaire sur l'affichage des nombres, incluant la précision décimale, l'alignement, le remplissage, les séparateurs de milliers et les conversions de base.

Valeur Spécificateur Résultat Description
3.14159 {:.2f} 3.14 Arrondi à deux décimales
3.14159 {:+.2f} +3.14 Signe explicite, deux décimales
-1.0 {:+.2f} -1.00 Signe négatif conservé, deux décimales
42 {:0>5d} 00042 Remplissage avec des zéros à gauche (largeur 5)
42 {:*<5d} 42*** Remplissage avec des astérisques à droite
1000000 {:,} 1,000,000 Séparateur de milliers
0.85 {:.1%} 85.0% Formatage en pourcentage
5000 {:.2e} 5.00e+03 Notation sciantifique
15 {:>10d} 15 Alignement à droite (par défaut)
15 {:<10d} 15 Alignement à gauche
15 {:^10d} 15 Centrage
255 {:b} 11111111 Conversion en binaire
255 {:x} ff Conversion en hexadécimal

Les symboles <, > et ^ dictent respectivement l'alignement à gauche, à droite et au centre. Ils peuvent être précédés d'un caractère de remplissage personnalisé (un seul caractère autorisé, sinon l'espace est utilisé par défaut). Le signe + force l'affichage du signe pour les nombres positifs, tandis que les lettres b, d, o et x définissent les bases numérique (binaire, décimal, octal, hexadécimal).

Échappement des accolades

Puisque les accolades sont utilisées comme délimiteurs de formatage, il est nécessaire de les doubler pour afficher des accolades littérales dans la chaîne finale.

print("Le dictionnaire vide s'écrit {{}} et contient actuellement {0} élément".format(0))

Étiquettes: Python str-format string-formatting formatage-chaines

Publié le 6 juillet à 00h06