8.4 Formatage de chaînes de caractères
Objectifs d'apprentissage
À la fin de cette section, vous devriez être en mesure de :
- Formater un modèle de chaîne à l'aide d'arguments d'entrée.
- Utiliser
format()pour générer des formats numériques à partir d'un modèle donné.
Spécification de format de chaîne
Python fournit une syntaxe de substitution de chaînes pour formater des chaînes de caractères à l'aide d'arguments d'entrée. Une chaîne de formatage (formatting string) définit un modèle et les règles selon lesquelles les valeurs doivent être formatées. Les chaînes de formatage permettent notamment d'utiliser des modèles pour construire différentes valeurs de chaînes et de définir des règles pour la longueur et l'alignement de la chaîne.
Formatage de chaînes avec des champs de remplacement
Les champs de remplacement (replacement fields) servent à définir un modèle permettant de produire plusieurs chaînes selon un même format. L'exemple ci-dessous présente deux valeurs de chaînes qui utilisent le même modèle pour adresser des demandes à différentes personnes afin de suivre différents cours.
Exemple 8.5
Valeurs de chaînes issues du même modèle
Dear John, I'd like to take a programming course with Prof. Potter.
Dear Kishwar, I'd like to take a math course with Prof. Robinson.
Dans l'exemple ci-dessus, les champs de remplacement sont 1) le nom de la personne à qui la demande est adressée, 2) l'intitulé du cours, et 3) le nom de l'enseignant. Pour créer un modèle, des champs de remplacement peuvent être ajoutés avec {} afin d'indiquer un emplacement réservé pour l'entrée de l'utilisateur. La méthode format() est utilisée pour transmettre les entrées destinées aux champs de remplacement dans un modèle de chaîne.
Exemple 8.6
Formatage d'un modèle de chaîne pour des demandes d'inscription à des cours
Un modèle de chaîne comportant des champs de remplacement est défini ci-dessous afin de créer des valeurs de chaînes avec différents arguments d'entrée. La méthode format() est utilisée pour transmettre les entrées au modèle dans le même ordre.
s = "Dear {}, I'd like to take a {} course with Prof. {}."
print(s)
print(s.format("John", "programming", "Potter"))
print(s.format("Kishwar", "math", "Robinson"))
La sortie du code ci-dessus est :
Dear {}, I'd like to take a {} course with Prof. {}.
Dear John, I'd like to take a programming course with Prof. Potter.
Dear Kishwar, I'd like to take a math course with Prof. Robinson.
Concepts en pratique
Modèle de chaîne et formatage
Champs de remplacement nommés
Les champs de remplacement peuvent être associés à une étiquette, appelés champs de remplacement nommés (named replacement fields), pour faciliter l'accès et améliorer la lisibilité du code. L'exemple ci-dessous illustre l'utilisation des champs de remplacement nommés dans des modèles de chaînes.
Exemple 8.7
Modèle météorologique saisonnier utilisant des champs de remplacement nommés
Un argument de remplacement nommé constitue un moyen pratique d'attribuer des étiquettes de noms aux champs de remplacement et de transmettre les valeurs associées aux champs de remplacement à l'aide des noms correspondants (au lieu de transmettre les valeurs dans l'ordre).
s = "Weather in {season} is {temperature}."
print(s)
print(s.format(season = "summer", temperature = "hot"))
print(s.format(season = "winter", temperature = "cold"))
La sortie du code ci-dessus est :
Weather in {season} is {temperature}.
Weather in summer is hot.
Weather in winter is cold.
Utilisation multiple d'un argument nommé
Puisque l'on fait référence aux champs de remplacement nommés à l'aide d'une clé de nom, un champ de remplacement nommé peut apparaître et être utilisé plus d'une fois dans le modèle. De plus, l'ordre positionnel n'est pas nécessaire lorsque des champs de remplacement nommés sont utilisés.
s = "Weather in {season} is {temperature}; very very {temperature}."
print(s)
print(s.format(season = "summer", temperature = "hot"))
print(s.format(temperature = "cold", season = "winter"))
La sortie du code ci-dessus est :
Weather in {season} is {temperature}; very very {temperature}.
Weather in summer is hot; very very hot.
Weather in winter is cold; very very cold.
Concepts en pratique
Exemples de champs de remplacement nommés
Champs de remplacement numérotés
La méthode de chaîne format() de Python peut utiliser l'ordre positionnel pour faire correspondre les arguments numérotés. Les champs de remplacement qui utilisent l'ordre positionnel des arguments sont appelés champs de remplacement numérotés (numbered replacement fields). L'indexation des arguments commence à 0. Ex. : print("{1}{0}".format("Home", "Welcome")) produit la valeur de chaîne "Welcome Home" comme premier argument. "Home" est à l'indice 0, et le second argument, "Welcome", est à l'indice 1. Remplacer ces arguments dans l'ordre "{1}{0}" crée la chaîne "Welcome Home".
Les champs de remplacement numérotés peuvent réutiliser les valeurs d'un argument pour plusieurs champs de remplacement en utilisant le même indice d'argument. L'exemple ci-dessous illustre comment un argument est utilisé pour plusieurs champs de remplacement numérotés.
Exemple 8.8
Champ de remplacement numéroté pour construire une phrase
Des champs de remplacement numérotés sont utilisés dans cet exemple pour construire des phrases telles que "very very cold" ou "very hot".
template1 = "{0} {0} {1}"
template2 = "{0} {1}"
print(template1.format("very", "cold"))
print(template2.format("very", "hot"))
La sortie du code ci-dessus est :
very very cold
very hot
Formatage de la longueur et de l'alignement des chaînes
Le formatage de la longueur de chaîne peut être nécessaire pour normaliser le style de sortie lorsque plusieurs valeurs de chaînes d'un même contexte sont créées et affichées. L'exemple ci-dessous montre un cas d'utilisation du formatage de chaînes lors de l'affichage d'un tableau comportant des colonnes de longueur minimale et un alignement spécifique.
Exemple 8.9
Un tableau formaté d'une liste d'étudiants
Un tableau formaté d'une liste d'étudiants
Student Name Major Grade
----------------------------------------------
Manoj Sara Computer Science A-
Gabriel Wang Electrical Engineering A
Alex Narayanan Social Sciences A+
Dans l'exemple ci-dessus, le tableau est formaté en trois colonnes. La première colonne occupe 15 caractères et est alignée à gauche. La deuxième colonne utilise 25 caractères et est centrée, et la dernière colonne utilise deux caractères et est alignée à droite. Les contrôles de spécification de format d'alignement et de longueur sont utilisés pour créer le tableau formaté.
La largeur de champ dans la spécification de format de chaîne est utilisée pour spécifier la longueur minimale de la chaîne donnée. Si la chaîne est plus courte que la longueur minimale indiquée, elle sera complétée par des caractères d'espacement. Une largeur de champ (field width) est incluse dans le champ de spécification de format à l'aide d'un entier après un deux-points. Ex. : {name:15} spécifie que la longueur minimale des valeurs de chaîne transmises au champ name est de 15.
Comme la largeur de champ peut être utilisée pour spécifier la longueur minimale d'une chaîne, celle-ci peut être complétée par des caractères d'espacement à droite, à gauche ou des deux côtés pour être respectivement alignée à gauche, alignée à droite ou centrée. Le type d'alignement de chaîne (string alignment type) est spécifié à l'aide des caractères <, > ou ^ après le deux-points lorsque la longueur de champ est spécifiée. Ex. : {name:^20} spécifie un champ de remplacement nommé d'une longueur minimale de 20 caractères qui est centré.
| Type d'alignement | Symbole | Exemple | Sortie |
|---|---|---|---|
| Aligné à gauche |
|
|
|
| Aligné à droite |
|
|
|
| Centré | ^ |
|
|
Concepts en pratique
Spécifier la largeur de champ et l'alignement
Formatage des nombres
La méthode format() peut être utilisée pour formater des valeurs numériques. Les valeurs numériques peuvent être complétées pour avoir une longueur minimale donnée, une précision et un caractère de signe. La syntaxe pour modifier les valeurs numériques suit la structure {[index]:[width][.precision][type]}. Dans la syntaxe donnée :
- Le champ
indexfait référence à l'indice de l'argument. - Le champ
widthfait référence à la longueur minimale de la chaîne. - Le champ
precisionfait référence à la précision en virgule flottante du nombre donné. - Le champ
typeindique le type de l'entrée transmise à la méthodeformat(). Les entrées en virgule flottante et décimales (entières) sont identifiées respectivement par"f"et"d". Les valeurs de chaînes sont également identifiées par"s".
Le tableau ci-dessous résume les options de formatage pour modifier les valeurs numériques.
| Exemple | Sortie | Explication |
|---|---|---|
|
|
La spécification de format |
|
|
La spécification de format |
|
|
La spécification de format |
|
|
La spécification de format |
|
|
La spécification de format |
Concepts en pratique
Exemples de formatage de valeurs numériques
À vous d'essayer
Formater une liste de nombres
Étant donné une liste de nombres (à virgule flottante ou entiers), affichez les nombres avec une précision de deux décimales et au moins six caractères.
Input: [12.5, 2]
Prints: 012.50
002:00