English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Introduction détaillée de str.format de formatage de chaîne en Python

Préface

Python dans 2.6 Dans la nouvelle version, une nouvelle méthode de formatage de chaîne a été ajoutée : str.format() . Sa syntaxe de base est de remplacer {} et : par %. de l'ancienne syntaxe.

La syntaxe des placeholders lors de la formatage :

replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

règle de "mapping"

Par la position

La méthode str.format() peut accepter un nombre illimité de paramètres, et les positions peuvent ne pas suivre l'ordre :

>>> "{0} {1).format("hello", "world")
'hello world'
>>> "{0} {1}".format("hello", "world")
'hello world'
>>> "{1} {0} {1).format("hello", "world")
'world hello world'

Par les paramètres de mot-clé

Lors de l'utilisation des paramètres clés, le nom des paramètres doit être fourni dans la chaîne :

>>> "Je suis {name}, l'âge est {age}".format(name="huoty", age=18)
"Je suis huoty, l'âge est 18'
>>> user = {"name": "huoty", "age": 18}
>>> "Je suis {name}, l'âge est {age}".format(**user)
"Je suis huoty, l'âge est 18'

Par l'attribut de l'objet

str.format() peut directement lire les attributs de l'utilisateur:

>>> class User(object):
...  def __init__(self, name, age):
...   self.name = name
...   self.age = age
...   
...  def __str__(self):
...   return "{self.name}({self.age})".format(self=self)
...  
...  def __repr__(self):
...   return self.__str__()
...  
...
>>> user = User("huoty", 18)
>>> user
huoty(18)
>>> "Je suis {user.name}, l'âge est {user.age}".format(user=user)
"Je suis huoty, l'âge est 18'

Par l'index

Dans une chaîne de caractères nécessitant un formatage, les éléments peuvent être accédés via des indices :

>>> names, ages = ["huoty", "esenich", "anan"], [18, 16, 8}
>>> "Je suis {0[0]}, l'âge est {1[2]}".format(names, ages)
"Je suis huoty, l'âge est 8'
>>> users = {"names": ["huoty", "esenich", "anan"], "ages": [18, 16, 8]}
>>> "Je suis {names[0]}, l'âge est {ages[0]}".format(**users)

Spécification de la conversion

Il est possible de spécifier le type de conversion de la chaîne :

 conversion ::= "r" | "s" | "a"

Dans lequel "!r" correspond à repr() ; "!s" correspond à str() ; "!a" correspond à ascii(). Exemple :

>>> "repr() affiche les guillemets: {!r}; str() ne teste pas: {!s}".format('test1', 'test2)
"repr() affiche les guillemets: 'test1'; str() ne teste pas:2"

Caractère de formatage

Remplissage et alignement

Le remplissage suit souvent l'alignement. ^, <, > représentent respectivement centré, aligné à gauche, aligné à droite. Le nombre suivant représente la largeur, et le : suivi d'un caractère représente le remplissage. Si aucun caractère n'est spécifié, il est remplacé par un espace par défaut.

>>> "{:>}8".format("181716)")
' 181716'
>>> "{:0>8".format("181716)")
'00181716'
>>> "{:->8".format("181716)")
'--181716'
>>> "{:-<8".format("181716)")
'181716--'
>>> "{:-^8".format("181716)")
'-181716-'
>>> "{:-<25}>".format("Here ")
'Here --------------------'

Précision flottante

Utilisez f pour représenter le type flottant et vous pouvez ajouter un contrôle de précision avant :

>>> "[ {:.2f} ]".format(321.33345)
'[ 321.33 ]'
>>> "[ {:.1f} ]".format(321.33345)
'[ 321.3 ]'
>>> "[ {:.4f} ]".format(321.33345)
'[ 321.3335 ]'
>>> "[ {:.4f} ]".format(321)
'[ 321.0000 ]'

Il est également possible de spécifier un signe pour les nombres à virgule flottante,+ représente afficher avant un nombre positif +afficher avant un nombre négatif -; (espace) signifie ajouter un espace avant un nombre positif et -;- C'est identique à ne rien ajouter ({:f}) :

>>> '{:+f}); {:+f}'.format(3.141592657, -3.141592657)
'+3.141593; -3.141593'
>>> '{: f}; {: f}'.format(3.141592657, -3.141592657)
' 3.141593; -3.141593'
>>> '{:f}; {:f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:-f}); {:-f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:+.4f}); {:+.4f}'.format(3.141592657, -3.141592657)
'+3.1416; -3.1416'

Spécification de l'octal

>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(18)
'int: 18; hex: 12; oct: 22; bin: 10010'
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(18)
'int: 18; hex: 0x12; oct: 0o22; bin: 0b10010'

Séparateur de milliers

Il est possible d'utiliser "," comme séparateur de milliers :

>>> '{:,}'.format(1234567890)
'1,234,567,890'

Affichage en pourcentage

>>> "progress: {:.2}.format(19.88/22)
'progress: 90.36%'

En réalité, format prend en charge encore plus de types de symboles :

type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Autres astuces

Encapsulation des placeholders

Certains moments, l'encapsulation des placeholders est très utile :

>>> '{0:{fill}{align}16}'.format("hello", fill='*', align='^')
'*****hello******'
>>>
>>> pour num dans range(5,12) :
... pour base en "dXob":
...   print("{0:{width}{base}}".format(num, base=base, width=}}5), end=' ')
...  print()
...  
...
 5  5  5 101
 6  6  6 110
 7  7  7 111
 8  8 10 1000
 9  9 11 1001
 10  A 12 1010
 11  B 13 1011

Utilisation comme fonction

Vous pouvez d'abord ne pas spécifier les paramètres de formatage et les appeler en tant que fonction à un endroit où vous n'en avez pas besoin :

>>> email_f = "Votre adresse e-mail était {email}".format
>>> print(email_f(email="[email protected]"))
Votre adresse e-mail était [email protected]

Echapper les accolades

Lorsque vous devez utiliser des accolades dans une chaîne, vous pouvez les échapper :

>>> "Le {} ensemble est souvent représenté comme {{0}} ".format("empty")
Le ensemble vide est souvent représenté comme {0}

Résumé

Voici la fin de cet article. J'espère que le contenu de cet article peut vous aider dans vos études ou votre travail. Si vous avez des questions, vous pouvez laisser des commentaires pour échanger. Merci de votre soutien au tutoriel d'extase.

Déclaration : le contenu de cet article est issu du réseau, et appartient à l'auteur original. Le contenu est apporté par les utilisateurs d'Internet et téléchargé de manière autonome. Ce site ne détient pas de propriété intellectuelle, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un email à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un email pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.

Vous pourriez aussi aimer