Formatage de Chaînes Python
Extrait de la documentation Python 3
Les opérations de formatage décrites ici (opérateur %) présentent diverses particularités qui entraînent un certain nombre d'erreurs courantes [...]. L'utilisation des littéraux de chaîne formatés plus récents [...] aide à éviter ces erreurs. Ces alternatives offrent également des approches plus puissantes, flexibles et extensibles pour le formatage de texte.
opérateur %
Privilégier les littéraux de chaîne
Pour le nouveau code, il est fortement recommandé d'utiliser str.format, ou les littéraux de chaîne formatés (Python 3.6+) plutôt que l'opérateur %.
# opérateur % : formatage de chaîne de style ancien (non recommandé pour le nouveau code)
name = 'Pete'
'Hello %s' % name # %s = placeholder de chaîne
"Hello Pete"
Nous pouvons utiliser le spécificateur de format %d pour convertir une valeur entière en chaîne :
num = 5
'I have %d apples' % num
"I have 5 apples"
str.format
Python 3 a introduit une nouvelle façon de formater les chaînes, qui a ensuite été rétroportée vers Python 2.7. Cela rend la syntaxe du formatage de chaîne plus régulière.
# méthode str.format() : formatage de chaîne moderne (Python 2.7+)
name = 'John'
age = 20
"Hello I'm {}, my age is {}".format(name, age) # {} = placeholder
"Hello I'm John, my age is 20"
"Hello I'm {0}, my age is {1}".format(name, age)
"Hello I'm John, my age is 20"
Littéraux de Chaîne Formatés ou f-Strings
Si vous utilisez Python 3.6+, les f-Strings de chaîne sont la méthode recommandée pour formater les chaînes.
Extrait de la documentation Python 3
Un littéral de chaîne formaté ou f-string est un littéral de chaîne préfixé par f ou F. Ces chaînes peuvent contenir des champs de remplacement, qui sont des expressions délimitées par des accolades {}. Alors que les autres littéraux de chaîne ont toujours une valeur constante, les chaînes formatées sont de véritables expressions évaluées à l'exécution.
# f-string : méthode recommandée pour formater les chaînes (Python 3.6+)
name = 'Elizabeth'
f'Hello {name}!' # Le préfixe f permet les expressions dans {}
'Hello Elizabeth!'
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
fmtf ou FformatstrIl est même possible d’effectuer des calculs en ligne avec :
# Les f-strings supportent les expressions : peuvent inclure des calculs à l'intérieur de {}
a = 5
b = 10
f'Five plus ten is {a + b} and not {2 * (a + b)}.' # Évalue les expressions
'Five plus ten is 15 and not 30.'
f-Strings sur Plusieurs Lignes
name = 'Robert'
messages = 12
(
f'Hi, {name}. '
f'You have {messages} unread messages'
)
'Hi, Robert. You have 12 unread messages'
Le spécificateur =
Ceci affichera l’expression et sa valeur :
# Spécificateur = : affiche à la fois le nom de la variable et sa valeur (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
f'date and time: {now=}' # Affiche "now='Nov/14/2022 - 20:50:01'"
"date and time: now='Nov/14/2022 - 20:50:01'"
Ajout d’espaces ou de caractères
name = 'Robert'
f"{name.upper() = :-^20}"
'name.upper() = -------ROBERT-------'
f"{name.upper() = :^20}"
'name.upper() = ROBERT '
f"{name.upper() = :20}"
'name.upper() = ROBERT '
Formatage des Chiffres
Ajout du séparateur de milliers
a = 10000000
f"{a:,}"
'10,000,000'
Arrondissement
a = 3.1415926
f"{a:.2f}"
'3.14'
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
f"{a:.2f}" ?Affichage en Pourcentage
a = 0.816562
f"{a:.2%}"
'81.66%'
Tableau de formatage des nombres
| Nombre | Format | Sortie | Description |
|---|---|---|---|
| 3.1415926 | {:.2f} | 3.14 | Formater le flottant avec 2 décimales |
| 3.1415926 | {:+.2f} | +3.14 | Formater le flottant avec 2 décimales et signe |
| -1 | {:+.2f} | -1.00 | Formater le flottant avec 2 décimales et signe |
| 2.71828 | {:.0f} | 3 | Formater le flottant sans décimales |
| 4 | {:0>2d} | 04 | Remplir le nombre avec des zéros (remplissage gauche, largeur 2) |
| 4 | {:x<4d} | 4xxx | Remplir le nombre avec des x (remplissage droite, largeur 4) |
| 10 | {:x<4d} | 10xx | Remplir le nombre avec des x (remplissage droite, largeur 4) |
| 1000000 | {:,} | 1,000,000 | Format de nombre avec séparateur de virgule |
| 0.35 | {:.2%} | 35.00% | Formater le pourcentage |
| 1000000000 | {:.2e} | 1.00e+09 | Notation exponentielle |
| 11 | {:11d} | 11 | Alignement à droite (par défaut, largeur 10) |
| 11 | {:<11d} | 11 | Alignement à gauche (largeur 10) |
| 11 | {:^11d} | 11 | Alignement centré (largeur 10) |
Chaînes de Modèles (Template Strings)
Un mécanisme plus simple et moins puissant, mais il est recommandé lors du traitement de chaînes générées par l’utilisateur. En raison de leur complexité réduite, les chaînes de modèles sont un choix plus sûr.
from string import Template
name = 'Elizabeth'
t = Template('Hey $name!')
t.substitute(name=name)
'Hey Elizabeth!'