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!'
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Welches Präfix wird für f-Strings in Python verwendet?
A. fmt
B. f oder F
C. format
D. str

Es 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'
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Was bewirkt f"{a:.2f}"?
A. Rundet die Zahl auf die nächste ganze Zahl
B. Formatiert als Prozentsatz
C. Formatiert die Zahl als Gleitkommazahl mit 2 Dezimalstellen
D. Konvertiert in wissenschaftliche Notation

Als Prozentsatz anzeigen

a = 0.816562
f"{a:.2%}"
'81.66%'

Zahlformatierungstabelle

ZahlFormatAusgabeBeschreibung
3.1415926{:.2f}3.14Gleitkommazahl mit 2 Dezimalstellen formatieren
3.1415926{:+.2f}+3.14Gleitkommazahl mit 2 Dezimalstellen und Vorzeichen formatieren
-1{:+.2f}-1.00Gleitkommazahl mit 2 Dezimalstellen und Vorzeichen formatieren
2.71828{:.0f}3Gleitkommazahl ohne Dezimalstellen formatieren
4{:0>2d}04Zahl mit Nullen auffüllen (linksbündig, Breite 2)
4{:x<4d}4xxxZahl mit x auffüllen (rechtsbündig, Breite 4)
10{:x<4d}10xxZahl mit x auffüllen (rechtsbündig, Breite 4)
1000000{:,}1,000,000Zahlenformat mit Komma als Trennzeichen
0.35{:.2%}35.00%Prozentformatierung
1000000000{:.2e}1.00e+09Exponentielle Notation
11{:11d}11Rechtsbündig (Standard, Breite 10)
11{:<11d}11Linksbündig (Breite 10)
11{:^11d}11Zentriert 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!'