Python Stringformatierung
Aus der Python 3 Dokumentation
Die hier beschriebenen Formatierungsoperationen (% Operator) weisen eine Vielzahl von Eigenheiten auf, die zu einer Reihe häufiger Fehler führen [...]. Die Verwendung der neueren formatierten String-Literale [...] hilft, diese Fehler zu vermeiden. Diese Alternativen bieten auch leistungsfähigere, flexiblere und erweiterbarere Ansätze zur Textformatierung.
% operator
String-Literale bevorzugen
Für neuen Code wird dringend empfohlen, str.format oder formatierte String-Literale (Python 3.6+) anstelle des % Operators zu verwenden.
# % operator: Stringformatierung alter Art (nicht empfohlen für neuen Code)
name = 'Pete'
'Hello %s' % name # %s = Platzhalter für String
"Hello Pete"
Wir können den Format-Spezifizierer %d verwenden, um einen int-Wert in einen String umzuwandeln:
num = 5
'I have %d apples' % num
"I have 5 apples"
str.format
Python 3 führte eine neue Methode zur Stringformatierung ein, die später nach Python 2.7 zurückportiert wurde. Dies macht die Syntax für die Stringformatierung einheitlicher.
# str.format() Methode: moderne Stringformatierung (Python 2.7+)
name = 'John'
age = 20
"Hello I'm {}, my age is {}".format(name, age) # {} = Platzhalter
"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"
Formatted String Literals or f-Strings
Wenn Sie Python 3.6+ verwenden, sind String f-Strings die empfohlene Methode zur Formatierung von Strings.
Aus der Python 3 Dokumentation
Ein formatierter String-Literal oder f-String ist ein String-Literal, dem f oder F vorangestellt ist. Diese Strings können Ersetzungsfelder enthalten, die Ausdrücke sind, die durch geschweifte Klammern {} begrenzt sind. Während andere String-Literale immer einen konstanten Wert haben, sind formatierte Strings eigentlich Ausdrücke, die zur Laufzeit ausgewertet werden.
# f-string: empfohlene Methode zur Formatierung von Strings (Python 3.6+)
name = 'Elizabeth'
f'Hello {name}!' # f Präfix erlaubt Ausdrücke in {}
'Hello Elizabeth!'
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
fmtf oder FformatstrEs ist sogar möglich, Inline-Arithmetik damit durchzuführen:
# f-strings unterstützen Ausdrücke: können Berechnungen innerhalb von {} enthalten
a = 5
b = 10
f'Five plus ten is {a + b} and not {2 * (a + b)}.' # Wertet Ausdrücke aus
'Five plus ten is 15 and not 30.'
Multiline f-Strings
name = 'Robert'
messages = 12
(
f'Hi, {name}. '
f'You have {messages} unread messages'
)
'Hi, Robert. You have 12 unread messages'
Der = Spezifizierer
Dieser gibt den Ausdruck und seinen Wert aus:
# = Spezifizierer: gibt sowohl den Variablennamen als auch den Wert aus (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
f'date and time: {now=}' # Gibt "now='Nov/14/2022 - 20:50:01'" aus
"date and time: now='Nov/14/2022 - 20:50:01'"
Hinzufügen von Leerzeichen oder Zeichen
name = 'Robert'
f"{name.upper() = :-^20}"
'name.upper() = -------ROBERT-------'
f"{name.upper() = :^20}"
'name.upper() = ROBERT '
f"{name.upper() = :20}"
'name.upper() = ROBERT '
Formatierung von Ziffern
Hinzufügen eines Tausendertrennzeichens
a = 10000000
f"{a:,}"
'10,000,000'
Rundung
a = 3.1415926
f"{a:.2f}"
'3.14'
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
f"{a:.2f}"?Als Prozentsatz anzeigen
a = 0.816562
f"{a:.2%}"
'81.66%'
Zahlformatierungstabelle
| Zahl | Format | Ausgabe | Beschreibung |
|---|---|---|---|
| 3.1415926 | {:.2f} | 3.14 | Gleitkommazahl mit 2 Dezimalstellen formatieren |
| 3.1415926 | {:+.2f} | +3.14 | Gleitkommazahl mit 2 Dezimalstellen und Vorzeichen formatieren |
| -1 | {:+.2f} | -1.00 | Gleitkommazahl mit 2 Dezimalstellen und Vorzeichen formatieren |
| 2.71828 | {:.0f} | 3 | Gleitkommazahl ohne Dezimalstellen formatieren |
| 4 | {:0>2d} | 04 | Zahl mit Nullen auffüllen (linksbündig, Breite 2) |
| 4 | {:x<4d} | 4xxx | Zahl mit x auffüllen (rechtsbündig, Breite 4) |
| 10 | {:x<4d} | 10xx | Zahl mit x auffüllen (rechtsbündig, Breite 4) |
| 1000000 | {:,} | 1,000,000 | Zahlenformat mit Komma als Trennzeichen |
| 0.35 | {:.2%} | 35.00% | Prozentformatierung |
| 1000000000 | {:.2e} | 1.00e+09 | Exponentielle Notation |
| 11 | {:11d} | 11 | Rechtsbündig (Standard, Breite 10) |
| 11 | {:<11d} | 11 | Linksbündig (Breite 10) |
| 11 | {:^11d} | 11 | Zentriert ausgerichtet (Breite 10) |
Template Strings
Ein einfacherer und weniger leistungsfähiger Mechanismus, der jedoch empfohlen wird, wenn Zeichenketten verarbeitet werden, die von Benutzern generiert wurden. Aufgrund ihrer geringeren Komplexität sind Template-Strings die sicherere Wahl.
from string import Template
name = 'Elizabeth'
t = Template('Hey $name!')
t.substitute(name=name)
'Hey Elizabeth!'