Sonderzeichen in einem String schreiben
Eine Escape-Sequenz beginnt mit einem Backslash (\), auf den ein oder mehrere Zeichen folgen. Python wertet diese Folge besonders aus. Dadurch kann ein Stringliteral etwa einen Zeilenumbruch oder ein Anführungszeichen enthalten, das das Literal sonst beenden würde.
Der Backslash verändert also, wie Python die folgenden Zeichen liest. Er gehört zur Schreibweise im Quellcode. Der fertige String enthält dagegen das Zeichen, für das diese Schreibweise steht.
Probleme beim Schreiben von Strings
Anführungszeichen und Backslashes brauchen innerhalb eines Strings besondere Aufmerksamkeit, weil Python sie liest, bevor der String entsteht. Ein inneres Anführungszeichen, das dem Begrenzungszeichen entspricht, beendet das Literal zu früh, und ein Backslash leitet in einem gewöhnlichen String eine Escape-Schreibweise ein. Ein Escape hält das störende Zeichen im Text, und zwei Backslashes ergeben einen einzelnen Backslash im fertigen Wert.
Zitatkonflikte
Wird dasselbe Anführungszeichen als Begrenzung und innerhalb des Strings verwendet, beendet ein nicht maskiertes inneres Zeichen das Literal zu früh. Python liest den restlichen Text dann als ungültigen Code.
# Problem: Einfaches Anführungszeichen innerhalb der Zeichenfolge
>>> 'I'm Bob.'
SyntaxError: invalid syntax
# Lösung: Verwende doppelte Anführungszeichen für die Zeichenfolge
>>> "I'm Bob."
"I'm Bob."
# Problem: beide Arten von Anführungszeichen im String
>>> 'He said: "I'm Bob."'
SyntaxError: invalid syntaxIm ersten Beispiel endet das Stringliteral deshalb bereits vor dem m. Der übrige Ausdruck ergibt keinen gültigen Python-Code.
Lösung mit Backslash
Ein Backslash (\) vor dem inneren Anführungszeichen maskiert es. Python behält das Zeichen dadurch im String, und der String läuft danach weiter.
# Verwendung einer Escape-Sequenz für einfache Anführungszeichen
>>> 'He said: "I\'m Bob."'
'He said: "I\'m Bob."'
# print zeigt den Stringwert nach der Escape-Verarbeitung
>>> print('He said: "I\'m Bob."')
He said: "I'm Bob."In diesem Beispiel teilt \' Python mit, dass das einfache Anführungszeichen im Text bleiben soll. Die Zeichenfolge läuft danach weiter.
Anzeigen von Backslashzeichen
Da der Backslash selbst die Escape-Sequenz einleitet, brauchst du zwei Backslashes im gewöhnlichen Stringliteral, um einen Backslash im fertigen String zu erhalten.
# Backslash in einem String anzeigen
>>> print('Die Escape-Sequenz für einen Zeilenumbruch ist \\n.')
Die Escape-Sequenz für einen Zeilenumbruch ist \n.
# Einen Raw-String mit dem Präfix r verwenden
>>> text = r'Die Escape-Sequenz für einen Zeilenumbruch ist \n.'
>>> text
'Die Escape-Sequenz für einen Zeilenumbruch ist \\n.'
>>> print(text)
Die Escape-Sequenz für einen Zeilenumbruch ist \n.Ein Raw-String mit einem Präfix wie r bewahrt die meisten Backslashes, statt sie als Escape-Sequenzen auszuwerten. Anführungszeichen müssen trotzdem zu den Begrenzern des Literals passen. Außerdem kann ein Raw-String nicht mit einer ungeraden Anzahl von Backslashes enden.
Übersicht der Escapesequenzen
Diese Escape-Sequenzen stellen Zeichen in Python-Stringliteralen dar:
| Escape-Sequenz | Bedeutung |
|---|---|
\' | Einfaches Anführungszeichen (') |
\" | Doppeltes Anführungszeichen (") |
\n | Neue Zeile (newline) |
\r | Wagenrücklauf |
\t | Horizontaler Tabulator |
\b | Rückschrittzeichen (Backspace) |
\\ | Backslash-Zeichen () |
\uxxxx | Unicode-Zeichen mit vierstelliger hexadezimaler Codepoint-Angabe |
\Uxxxxxxxx | Unicode-Zeichen mit achtstelliger hexadezimaler Codepoint-Angabe |
\N{name} | Unicode-Zeichen anhand seines registrierten Namens |
\xhh | Zeichen mit zweistelligem Hexadezimalwert |
Jede Escape-Sequenz hat eine bestimmte Funktion zur Steuerung der Anzeige oder des Formats von Text in Programmen.
Geschweifte Klammern in Strings zur Formatierung maskieren
In str.format() und f-Strings begrenzen geschweifte Klammern die Ersetzungsfelder. Doppelte Klammern maskieren sie für die Formatierungssyntax. Dieser Mechanismus ist von den Backslash-Escape-Sequenzen in Stringliteralen zu unterscheiden.
# Maskierte geschweifte Klammern in einem Format-String: {{ }}
>>> '{{}}'.format('text')
'{}'
# Text mit geschweiften Klammern anzeigen
>>> '{{{}}}'.format('text')
'{text}'{{ ergibt eine öffnende und }} eine schließende geschweifte Klammer. In '{{{}}}' werden die äußeren Klammerpaare zu wörtlichen Zeichen, während das mittlere {} ein Ersetzungsfeld bleibt.
Mehrere Escapes in einer Ausgabe verwenden
Im folgenden Beispiel steuern Escape-Sequenzen Tabulatoren und Zeilenumbrüche sowie Anführungszeichen und wörtliche Backslashes in einer Ausgabe.
# Erstellen einer formatierten Ausgabe mit Tabulator und Zeilenumbruch
print("Name\t: John Doe")
print("Alter\t: 25 Jahre")
print("Adresse\t: Jakarta\n")
# Dialog mit Anführungszeichen anzeigen
print('Er sagte: „Heute ist schönes Wetter!“')
# Dateipfad mit Backslash anzeigen
print("Datei gespeichert unter: C:\\Users\\Documents\\data.txt")
# Kombination verschiedener Escape-Sequenzen
print("Erste Zeile\nZweite Zeile\t(mit Tabulator)\nDritte Zeile")In diesem Beispiel erstellt \t übersichtliche Spalten, \n trennt Zeilen und \\ zeigt Windows-Dateipfade korrekt an.
Entscheidend ist der Unterschied zwischen der Schreibweise im Quellcode und dem fertigen String. \n besteht im Quellcode beispielsweise aus zwei Zeichen, steht im String aber für genau einen Zeilenumbruch.