2.1.5.2 Opérations de formatage de chaînes

Les chaînes de caractères ont une unique opération intégrée: l'opérateur % avec la chaîne comme argument gauche et un format comme argument droit, est interprété de la même façon que dans la fonction C sprintf(). La chaîne résultat du formatage est retournée.

L'argument de droite doit être un tuple avec un élément par élément % spécifié dans le format. Si le format ne demande qu'un seul élément, alors l'argument de droite peut ne pas être un tuple.1 Les caractères de format autorisés sont les suivants: %, c, s, i, d, u, o, x, X, e, E, f, g, G. Le caractère * avec un entier permet de spécifier la taille ou la précision du formatage. Les caractères spéciaux -, +, espace, # et 0 sont également compris. Les indicateurs h, l ou L sont acceptés mais ignorés. Le format %s assure la conversion de tout objet Python en une chaîne de caractères en utilisant str(). Les fonctionnalités ANSI associées à %p et %n ne sont pas disponibles. Enfin, étant donné que les chaînes de caractères en Python ont une taille explicite, le format %s ne présuppose pas la présence de '\0' à la fin de la chaîne.

Pour des raisons de sûreté de fonctionnement, les précisions associées aux nombres flottants sont limitées à 50, les formats %f pour les nombres dont la valeur absolue est supérieure à 1e25 sont remplacés par %g.2 Toute autre erreur lève une exception.

Si l'argument de droite de la chaîne à formater est un dictionnaire (ou toute autre table associative), ce sont alors les clefs spécifiées dans la chaîne de formatage qui permettent de retrouver les valeurs du dictionnaire à substituer dans cette chaîne. La syntaxe est alors le "%" suivi de la clef entre parenthèses et les autres spécificateurs de format. Par exemple (dans ce cas, c'est le dictionnaire global qui est utilisé):

>>> nombre = 2
>>> langage = 'Python'
>>> print '%(langage)s possède %(nombre)03d types de guillemets.' % vars()
Python possède 002 types de guillemets.

Dans ce cas, aucun spécificateur de format * ne peut être utilisé, car il faudrait une liste séquentielle de paramètres.

Des fonctions supplémentaires sont disponibles dans le module string et dans le module intégré re.




Notes

1
Ou, dans ce cas, un tuple avec un seul élément.
2
Ces valeurs sont assez arbitraires. L'idée est d'éviter d'afficher des valeurs non significatives pour des grandes valeurs, si on ne précise pas explicitement la précision, liée aux capacités de la machine.