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

Detaillierte Erklärung der String-Formatierung mit str.format in Python

Einleitung

Python in 2.6 In der neuen Version wurde ein neuer String-Formatierungsansatz hinzugefügt: str.format(). Seine Grundsyntax besteht darin, {} und : anstelle der alten %. zu verwenden.

Syntax für Platzhalter bei der Formatierung:

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

Regel "Mapping"

Durch Position

str.format() kann unbeschränzt viele Parameter akzeptieren und die Position muss nicht geordnet sein:

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

Durch Schlüsselwortparameter

Beim Verwenden von Schlüsselwörtern müssen die Parameternamen in der Zeichenfolge bereitgestellt werden:

>>> "Ich bin {name}, Alter ist {age}".format(name="huoty", age=18)
'I am huoty, age is 18'
>>> user = {"name": "huoty", "age": 18}
>>> "Ich bin {name}, Alter ist {age}".format(**user)
'I am huoty, age is 18'

通过对象属性

str.format() kann direkt auf Benutzerattribute zugreifen:

>>> 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)
>>> "I am {user.name}, age is {user.age}".format(user=user)
'I am huoty, age is 18'

Durch Index

Innerhalb der zu formatierenden Zeichenkette können Elemente durch Index erreicht werden:

>>> names, ages = ["huoty", "esenich", "anan"], [18, 16, 8}
>>> "I am {0[0]}, age is {1[2]}".format(names, ages)
'I am huoty, age is 8'
>>> users = {"names": ["huoty", "esenich", "anan"], "ages": [18, 16, 8]}
>>> "I am {names[0]}, age is {ages[0]}".format(**users)

Bestimmte Konvertierung

Der Typ der String-Konvertierung kann angegeben werden:

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

Dabei entspricht "!r" repr(); "!s" entspricht str(); "!a" entspricht ascii(). Beispiel:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"

Formatierungszeichen

Füllung und Ausrichtung

Füllung wird oft zusammen mit Ausrichtung verwendet. ^, <, > stehen für Zentriert, Links ausgerichtet, Rechts ausgerichtet, gefolgt von Breite, : Zeichen steht für den Füllungscharakter, der nur ein Zeichen sein kann, wird nichts angegeben, wird standardmäßig ein Leerzeichen verwendet.

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

Fließkommazahl-Precision

Verwenden Sie f für den Fließkommartyp und können Sie vor ihm Präzisionskontrollen hinzufügen:

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

Man kann auch für Fließkommazahlen ein Symbol angeben,+ zeigt vor positiven an +vor negativen anzeigen wird -; (Leerzeichen) bedeutet, dass ein Leerzeichen vor positiven Zahlen und vor negativen -;- Ist一致 mit Nichts Hinzufügen ({: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'

Spezifizieren Sie den Radix

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

Tausender-Trennzeichen

Man kann "," als Tausender-Trennzeichen verwenden:

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

Prozentsatzanzeige

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

Tatsächlich unterstützt format noch mehr Typensymbole:

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

Andere Techniken

Platzhalter-Einfügen

Manchmal ist das Einfügen von Platzhaltern noch sehr nützlich:

>>> "{0:{füllen}{ausrichten}}16}'.format("hello", füllen='*', ausrichten='^')
'*****hello******'
>>>
>>> für num in range(5,12)
... für base in "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

Als Funktion verwenden

Man kann zunächst keine Formatierungsparameter angeben und die Funktion an anderer Stelle als Funktion aufrufen:

>>> email_f = "Ihre E-Mail-Adresse war {email}".format
>>> print(email_f(email="[email protected]"))
Ihre E-Mail-Adresse war [email protected]

Fluchtwort für Klammern

Wenn es erforderlich ist, Klammern in einem String zu verwenden, können Sie die Klammern als Fluchtwort verwenden:

>>> "Der {} Satz wird oft als {{0}} dargestellt ".format("leer")
'Der leere Satz wird oft als {0} dargestellt'

Zusammenfassung

Das ist der Abschluss dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels Ihnen im Lernen oder bei der Arbeit hilft. Wenn Sie Fragen haben, können Sie gerne Kommentare hinterlassen. Vielen Dank für Ihre Unterstützung der Anleitung.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem jeweiligen Urheber. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie verdächtige urheberrechtliche Inhalte finden, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @ beim Senden von E-Mails und geben Sie relevante Beweise an. Sobald überprüft, wird die Website den fraglichen Inhalt sofort löschen, der urheberrechtlich verletzt wird.)

Vermutlich gefällt Ihnen