Comment utiliser les formateurs de chaînes dans Python 3

introduction

La méthode + str.format () + de Python de la classe string vous permet de faire https: // www.digitalocean.com/community/tutorials/how-to-use-variables-in-python-3[variable] substitutions et formatage de valeurs. Cela permet aux éléments concatenate de former une chaîne par le biais d’un formatage positionnel.

Ce didacticiel vous guidera à travers certaines des utilisations courantes des formateurs en Python, qui peuvent aider à rendre votre code et votre programme plus lisibles et conviviaux.

Utiliser les formateurs

Les formats fonctionnent en insérant un ou plusieurs * champs de remplacement * ou espaces réservés - définis par une paire d’accolades + {} + - dans une chaîne et en appelant la méthode + str.format () +. Vous allez transmettre à la méthode la valeur que vous souhaitez concaténer avec la chaîne. Cette valeur sera transmise au même endroit que votre espace réservé est positionné lorsque vous exécutez le programme.

Imprimons une chaîne qui utilise un formateur:

print("Sammy has {} balloons.".format(5))
OutputSammy has 5 balloons.

Dans l’exemple ci-dessus, nous avons construit une chaîne avec une paire d’accolades comme élément de substitution:

"Sammy has {} balloons."

Nous avons ensuite ajouté la méthode + str.format () + et avons transmis la valeur de l’entier + 5 + à cette méthode. Ceci place la valeur de + 5 + dans la chaîne où les accolades étaient:

Sammy has 5 balloons.

Nous pouvons également affecter une variable égale à la valeur d’une chaîne contenant des espaces réservés au formateur:

open_string = "Sammy loves {}."
print(open_string.format("open source"))
OutputSammy loves open source.

Dans ce deuxième exemple, nous avons concaténé la chaîne " open source " avec la chaîne la plus grande, en remplaçant les accolades de la chaîne d’origine.

Les formats en Python vous permettent d’utiliser des accolades comme espaces réservés pour les valeurs que vous allez transmettre avec la méthode + str.format () +.

Utilisation de formats avec plusieurs espaces réservés

Vous pouvez utiliser plusieurs paires d’accolades lorsque vous utilisez des formateurs. Si nous souhaitons ajouter une autre substitution de variable à la phrase ci-dessus, nous pouvons le faire en ajoutant une deuxième paire d’accolades et en transmettant une deuxième valeur à la méthode:

new_open_string = "Sammy loves {} {}."                      #2 {} placeholders
print(new_open_string.format("open-source", "software"))    #Pass 2 strings into method, separated by a comma
OutputSammy loves open-source software.

Pour ajouter une autre substitution, nous avons ajouté une deuxième paire d’accolades dans la chaîne d’origine. Ensuite, nous avons passé deux chaînes dans la méthode + str.format () +, en les séparant par une virgule.

En suivant la même syntaxe, nous pouvons ajouter des substitutions supplémentaires:

sammy_string = "Sammy loves {} {}, and has {} {}."                      #4 {} placeholders
print(sammy_string.format("open-source", "software", 5, "balloons"))    #Pass 4 strings into method
OutputSammy loves open-source software, and has 5 balloons.

Dans + sammy_string +, nous avons ajouté 4 paires d’accolades comme espaces réservés pour la substitution de variable. Nous avons ensuite passé 4 valeurs dans la méthode + str.format () +, mélangeant des types de données string et integer. Chacune de ces valeurs est séparée par une virgule.

Réorganisation des formats avec des arguments de position et de mot clé

Lorsque nous laissons des accolades vides sans aucun paramètre, Python remplacera les valeurs transmises par la méthode + str.format () + dans l’ordre. Comme nous l’avons vu jusqu’ici, une construction de formateur avec deux accolades vides avec deux valeurs passées ressemblera à ceci:

print("Sammy the {} has a pet {}!".format("shark", "pilot fish"))
OutputSammy the shark has a pet pilot fish!

La première paire d’accolades est remplacée par la valeur de chaîne " shark ", et la seconde paire est remplacée par la valeur de chaîne "" pilote "`.

Les valeurs qui existent dans la méthode ressemblent à ceci:

("shark", "pilot fish")

Ce sont essentiellement les tuple type de données et chaque valeur individuelle contenue dans le tuple peut être appelée par son numéro d’index, qui commence avec le numéro d’index 0.

Nous pouvons passer ces numéros d’index dans les accolades qui servent d’espaces réservés dans la chaîne d’origine:

print("Sammy the {0} has a pet {1}!".format("shark", "pilot fish"))

Dans l’exemple ci-dessus, le résultat sera ce que nous obtiendrons sans passer des numéros d’index aux accolades, car nous appelons les valeurs du tuple dans l’ordre:

OutputSammy the shark has a pet pilot fish!

Mais si nous inversons les numéros d’index avec les paramètres des espaces réservés, nous pouvons inverser les valeurs transmises à la chaîne:

print("Sammy the {1} has a pet {0}!".format("shark", "pilot fish"))
OutputSammy the pilot fish has a pet shark!

Si vous appelez un numéro d’indice 2 dans un tuple qui a des valeurs aux positions d’index 0 et 1, vous appelez une valeur hors limites. Lorsque vous appelez un numéro d’index hors de portée, vous recevez un message d’erreur:

print("Sammy the {2} has a pet {1}!".format("shark", "pilot fish"))
OutputIndexError: tuple index out of range

Le message d’erreur que nous voyons fait référence au nuplet n’ayant que des valeurs aux indices 0 et 1, plaçant ainsi l’index 2 hors de portée.

Ajoutons quelques espaces réservés supplémentaires et quelques valeurs supplémentaires à leur transmettre, afin que nous puissions comprendre comment nous pouvons réorganiser un peu mieux les formateurs. Premièrement, voici une nouvelle chaîne avec quatre espaces réservés:

print("Sammy is a {}, {}, and {} {}!".format("happy", "smiling", "blue", "shark"))
OutputSammy is a happy, smiling and blue shark!

Sans paramètres, les valeurs transmises à la méthode + str.format () + sont concaténées dans la chaîne dans l’ordre.

Les valeurs de chaîne contenues dans le tuple correspondent aux numéros d’index suivants:

“happy” “smiling” “blue” “shark”

0

1

2

3

Utilisons les numéros d’index des valeurs pour changer l’ordre dans lequel elles apparaissent dans la chaîne:

print("Sammy is a {3}, {2}, and {1} {0}!".format("happy", "smiling", "blue", "shark"))
OutputSammy is a shark, blue, and smiling happy!

Depuis que nous avons commencé avec l’index numéro 3, nous avons appelé la dernière valeur " shark " en premier. Les autres numéros d’index inclus en tant que paramètres changent l’ordre d’affichage des mots dans la chaîne d’origine.

En plus des arguments de position, nous pouvons également introduire des arguments de mot clé appelés par leur nom de mot clé:

print("Sammy the {0} {1} a {pr}.".format("shark", "made", pr = "pull request"))
OutputSammy the shark made a pull request.

Cet exemple montre l’utilisation d’un argument de mot-clé utilisé avec des arguments de position. Nous pouvons compléter l’argument clé + pr + à côté des arguments de position et déplacer ces arguments pour modifier la chaîne résultante:

print("Sammy the {pr} {1} a {0}.".format("shark", "made", pr = "pull request"))
OutputSammy the pull request made a shark.

Les arguments de position et de mot-clé utilisés avec les formateurs de chaîne nous donnent plus de contrôle sur la manipulation de nos chaînes d’origine via le réordonnancement.

Spécifier le type

Nous pouvons inclure plus de paramètres dans les accolades de notre syntaxe. Nous allons utiliser la syntaxe de code de format + {nom_zone: conversion} +, où + nom_zone + spécifie le numéro d’index de l’argument de la méthode + str.format () + que nous avons expliquée dans le https: //www.digitalocean.com/community/tutorials/how-to-use-string-formatters-in-python-3#reordering-formatters-with-positional-and-keyword-arguments[reordering section], et `+ conversion + `fait référence au code de conversion du type de données que vous utilisez avec le formateur.

Le type de conversion fait référence au code de type à un caractère utilisé par Python. Les codes que nous allons utiliser ici sont + s + pour chaîne, + d + pour afficher les entiers décimaux (base 10), et + f + que nous utiliserons pour afficher les flottants avec des décimales. Vous pouvez en savoir plus sur le Format-Specification Mini-Language dans la documentation officielle de Python 3.

Voyons un exemple dans lequel nous avons passé un entier via la méthode, mais souhaitons l’afficher sous forme de float en ajoutant l’argument du type de conversion + f +:

print("Sammy ate {0:f} percent of a {1}!".format(75, "pizza"))
OutputSammy ate 75.000000 percent of a pizza!

Nous avons utilisé la syntaxe + {field_name: conversion} + pour le premier champ de remplacement d’accolade pour indiquer un nombre à virgule flottante. La deuxième accolade utilise uniquement le premier paramètre + {field_name} +.

Dans l’exemple ci-dessus, de nombreux nombres s’affichent après le signe décimal, mais vous pouvez les limiter. Lorsque vous spécifiez + f + pour les valeurs flottantes, vous pouvez également spécifier la précision de cette valeur en incluant un point ``.. + `Suivi par le nombre de chiffres après la décimale que vous souhaitez inclure.

Si Sammy a mangé 75,765367% de la pizza, mais que nous n’avons pas besoin d’un niveau élevé de précision, nous pouvons limiter le nombre de places après la décimale à 3 en ajoutant + .3 + avant le type de conversion + f +:

print("Sammy ate {0:.3f} percent of a pizza!".format(75.765367))
OutputSammy ate 75.765 percent of a pizza!

Si nous voulons juste une décimale, nous pouvons réécrire la chaîne et la méthode comme suit:

print("Sammy ate {0:.1f} percent of a pizza!".format(75.765367))
OutputSammy ate 75.8 percent of a pizza!

Notez que si vous modifiez la précision, le nombre sera arrondi.

Bien que nous affichions un nombre sans décimale sous la forme d’un nombre à virgule flottante, si nous essayons de changer le nombre à virgule flottante en entier en utilisant le type de conversion + d +, nous recevrons une erreur:

print("Sammy ate {0:d} percent of a pizza!".format(75.765367))
OutputValueError: Unknown format code 'd' for object of type 'float'

Si vous souhaitez qu’aucune décimale ne soit affichée, vous pouvez écrire votre formateur de la manière suivante:

print("Sammy ate {0:.0f} percent of a pizza!".format(75.765367))
OutputSammy ate 76 percent of a pizza!

Ce ne sera pas convertir votre float à un entier, mais au lieu de cela le nombre de places affichées après le point décimal.

Rembourrage Variable Substitutions

Comme les espaces réservés sont des champs de remplacement, vous pouvez * remplir * ou créer de l’espace autour d’un élément en augmentant la taille du champ grâce à des paramètres supplémentaires. Cela peut être utile lorsque nous devons organiser beaucoup de données de manière visuelle.

Nous pouvons ajouter un nombre pour indiquer la taille du champ (en termes de caractères) après le signe deux-points +: + entre les accolades de notre syntaxe:

print("Sammy has {0:4} red {1:16}!".format(5, "balloons"))
OutputSammy has    5 red balloons        !

Dans l’exemple ci-dessus, nous avons le nombre + 5 + une taille de champ de caractère de 4 et la chaîne + balloons on une taille de champ de caractère de 16 (parce que c’est une longue chaîne).

Comme nous le voyons, par défaut, les chaînes sont justifiées à gauche dans le champ et les nombres, à droite. Vous pouvez modifier cela en plaçant un code d’alignement juste après les deux points. + <+ alignera le texte dans un champ à gauche, + ^ + le centrera dans le champ et +> + le alignera à droite.

Alignons le numéro à gauche et centrons la chaîne:

print("Sammy has {0:<4} red {1:^16}!".format(5, "balloons"))
OutputSammy has 5    red     balloons    !

Nous voyons maintenant que + 5 + est aligné à gauche, fournissant de l’espace dans le champ avant + rouge +, et + balloons + est centré dans son champ avec un espace à gauche et à droite de celui-ci.

Par défaut, lorsque nous agrandissons un champ avec des outils de formatage, Python le remplit avec des caractères d’espacement. Nous pouvons le modifier pour qu’il s’agisse d’un caractère différent en spécifiant le caractère que nous voulons que ce soit directement après les deux points:

print("{:*^20s}".format("Sammy"))
Output*******Sammy********

Nous acceptons que la chaîne soit passée à + ​​str.format () + à la position d’index 0, car nous n’avons pas spécifié autre chose, y compris les deux points et en spécifiant que nous utiliserons + * + au lieu de l’espace pour remplir sur le terrain. Nous centrons la chaîne avec + ^ +, en spécifiant que la taille du champ est de 20 caractères et en indiquant également que nous travaillons avec un type de conversion de chaîne en incluant + s +.

Nous pouvons combiner ces paramètres avec d’autres paramètres que nous avons utilisés auparavant:

print("Sammy ate {0:5.0f} percent of a pizza!".format(75.765367))
OutputSammy ate    76 percent of a pizza!

Dans les paramètres à l’intérieur des accolades, nous avons spécifié le numéro de champ d’index du flottant et inclus les deux points, indiqué la taille du numéro de champ et inclus le point final, écrit le nombre de places après la décimale, puis spécifié le type de conversion de + f +.

Utilisation de variables

Jusqu’à présent, nous avons passé des entiers, des flottants et des chaînes dans la méthode + str.format () +, mais nous pouvons également transmettre des variables via la méthode. Cela fonctionne comme n’importe quelle autre variable.

nBalloons = 8
print("Sammy has {} balloons today!".format(nBalloons))
OutputSammy has 8 balloons today!

Nous pouvons utiliser des variables à la fois pour la chaîne d’origine et pour ce qui est passé dans la méthode:

sammy = "Sammy has {} balloons today!"
nBalloons = 8
print(sammy.format(nBalloons))
OutputSammy has 8 balloons today!

Les variables peuvent facilement être substituées à chaque partie de notre construction de syntaxe de formateur. Cela facilite le travail lorsque nous prenons des entrées générées par l’utilisateur et que nous affectons ces valeurs à des variables.

Utilisation de formats pour organiser les données

Les formateurs peuvent être vus sous leur meilleur jour quand ils sont utilisés pour organiser beaucoup de données de manière visuelle. Si nous montrons des bases de données aux utilisateurs, l’utilisation de formateurs pour augmenter la taille du champ et modifier l’alignement peut rendre votre sortie plus lisible.

Regardons une boucle for typique en Python qui imprimera + i +, ` + i * i + et + i * i * i + `dans la plage de 3 à 12:

for i in range(3,13):
   print(i, i*i, i*i*i)
Output3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728

Tandis que la sortie est organisée d’une certaine manière, les nombres débordent dans les colonnes de l’autre, ce qui rend le bas de la sortie moins lisible. Si vous travaillez avec un ensemble de données plus volumineux comprenant de nombreux petits et grands nombres, cela peut poser un problème.

Utilisons des outils de formatage pour donner plus d’espace à ces nombres:

for i in range(3,13):
   print("{:3d} {:4d} {:5d}".format(i, i*i, i*i*i))

Ici, dans nos accolades, nous n’avons pas ajouté le nom du champ pour le numéro d’index et nous avons commencé par les deux points, suivis du numéro correspondant à la taille du champ et d’un type de conversion + d + puisque nous travaillons avec des entiers. Dans cet exemple, nous nous sommes adaptés à la taille de chaque sortie attendue, en donnant deux espaces de caractères supplémentaires pour chacun, en fonction de la taille de nombre maximale possible. Notre sortie ressemble à ceci:

Output  3    9    27
 4   16    64
 5   25   125
 6   36   216
 7   49   343
 8   64   512
 9   81   729
10  100  1000
11  121  1331
12  144  1728

Nous pouvons spécifier un numéro de taille de champ cohérent afin d’avoir des colonnes paires, en nous assurant que nous prenons en charge les nombres plus grands:

for i in range(3,13):
   print("{:6d} {:6d} {:6d}".format(i, i*i, i*i*i))
Output     3      9     27
    4     16     64
    5     25    125
    6     36    216
    7     49    343
    8     64    512
    9     81    729
   10    100   1000
   11    121   1331
   12    144   1728

Nous pouvons également manipuler l’alignement des colonnes en ajoutant + <+, '+ ^ + et +> + pour l’alignement du texte, changez + d + en + f + `pour ajouter des décimales, champ de modification nommez des numéros d’index, et plus encore pour vous assurer que nous affichons les données comme nous le souhaiterions.

Conclusion

L’utilisation de formateurs pour la substitution de variables peut être un moyen efficace de concaténer des chaînes et d’organiser des valeurs et des données. Les formats constituent un moyen simple mais non descriptif de passer des substitutions de variables à une chaîne. Ils sont également utiles pour garantir que la sortie est lisible et conviviale.