Python Strings: Ein vollständiger Leitfaden
Python Strings von Grund auf lernen: Erstellung, Indizierung, Slicing, f-Strings, integrierte Methoden und typische Fallstricke mit Beispielen.
Strings gehören zu den am häufigsten verwendeten Datentypen in Python. Jedes Mal, wenn Ihr Programm eine Datei liest, eine Nachricht anzeigt oder Eingaben verarbeitet, arbeitet es mit Strings. Dieses Kapitel behandelt die Erstellung von Strings, Indizierung und Slicing, die Verwendung integrierter Methoden sowie häufige Fehlerquellen.
Was ist ein string in Python?
Ein string ist eine geordnete, unveränderliche Folge von Unicode-Zeichen. „Unveränderlich" bedeutet, dass Sie ein Zeichen niemals direkt ändern können — jede Operation, die einen string scheinbar verändert, erstellt tatsächlich einen neuen. Strings können Buchstaben, Ziffern, Satzzeichen, Leerzeichen oder beliebige Unicode-Zeichen (einschließlich Emojis) enthalten.
greeting = "Hello, world!"
print(type(greeting)) # <class 'str'>
print(len(greeting)) # 13Strings erstellen
Python akzeptiert drei Anführungszeichen-Stile, die alle gleichwertig sind:
single = 'Python'
double = "Python"
triple = """Python""" # triple-double also works as '''Python'''Einfache und doppelte Anführungszeichen
Verwenden Sie diejenigen, die das Escapen des Anführungszeichens innerhalb des Strings vermeiden:
message1 = "It's a great day" # apostrophe is fine inside double quotes
message2 = 'She said "hello"' # double quote is fine inside single quotesDreifach angeführte (mehrzeilige) Strings
Dreifache Anführungszeichen ermöglichen es einem string, mehrere Zeilen zu umspannen, ohne Escape-Sequenzen zu benötigen:
poem = """Roses are red,
Violets are blue,
Python is awesome,
And so are you."""
print(poem)Ausgabe:
Roses are red,
Violets are blue,
Python is awesome,
And so are you.Dreifach angeführte Strings sind auch die übliche Methode zum Schreiben von Docstrings — den Dokumentationsblöcken, die am Anfang von Funktionen, Klassen und Modulen stehen.
Andere Typen in Strings umwandeln
Verwenden Sie die eingebaute Funktion str(), um ein beliebiges Objekt in seine string-Darstellung umzuwandeln:
num = 42
pi = 3.14
flag = True
print(str(num)) # '42'
print(str(pi)) # '3.14'
print(str(flag)) # 'True'Zeichen indizieren
Python verwendet nullbasierte Indizierung: Das erste Zeichen befindet sich an Index 0. Sie können auch negative Indizes verwenden — -1 verweist auf das letzte Zeichen, -2 auf das vorletzte und so weiter.
Der Zugriff auf einen Index außerhalb des gültigen Bereichs löst einen IndexError aus.
Strings slicen
Ein Slice extrahiert einen Teil eines Strings mit der Syntax s[start:stop:step].
| Teil | Bedeutung | Standard |
|---|---|---|
start | Index des ersten einzuschließenden Zeichens | 0 |
stop | Index des ersten auszuschließenden Zeichens | len(s) |
step | Wie viele Zeichen bei jedem Schritt übersprungen werden | 1 |
s = "Hello, World!"
print(s[0:5]) # Hello — characters at indexes 0–4
print(s[7:]) # World! — from index 7 to the end
print(s[:5]) # Hello — from the start to index 4
print(s[-6:]) # World! — last 6 characters
print(s[::2]) # Hlo ol! — every other character
print(s[::-1]) # !dlroW ,olleH — reversed stringEinen tieferen Einblick in die Slicing-Syntax erhalten Sie im Kapitel Slicing Strings.
String-Verkettung und Wiederholung
Der Operator + verbindet zwei Strings; der Operator * wiederholt einen string eine bestimmte Anzahl von Malen.
Bei umfangreicher Verkettung innerhalb einer Schleife sollten Sie str.join() anstelle von + verwenden — das ist deutlich schneller, da keine temporären string-Objekte erstellt werden:
words = ["one", "two", "three"]
result = ", ".join(words)
print(result) # one, two, threeString-Wiederholung
Die Operatoren in und not in
Prüfen Sie mit in oder not in, ob ein Teilstring innerhalb eines Strings vorhanden ist:
text = "The quick brown fox"
print("quick" in text) # True
print("slow" in text) # False
print("slow" not in text) # TrueString-Länge
len() gibt die Anzahl der Zeichen in einem string zurück:
s = "Python"
print(len(s)) # 6
empty = ""
print(len(empty)) # 0Escape-Zeichen
Einige Zeichen können nicht direkt in einen string eingegeben werden. Python verwendet einen Backslash \, um Escape-Sequenzen einzuleiten:
| Sequenz | Zeichen |
|---|---|
\n | Zeilenumbruch |
\t | Tabulator |
\\ | Literaler Backslash |
\' | Einfaches Anführungszeichen |
\" | Doppeltes Anführungszeichen |
\r | Wagenrücklauf |
print("Line one\nLine two")
# Line one
# Line two
print("Name:\tAlice")
# Name: Alice
path = "C:\\Users\\Alice"
print(path) # C:\Users\AliceUm die Escape-Verarbeitung vollständig zu deaktivieren, stellen Sie dem string ein r voran, um einen Raw-string zu erstellen — nützlich für reguläre Ausdrücke und Windows-Pfade:
pattern = r"\d+\.\d+" # treated literally, no escaping needed
print(pattern) # \d+\.\d+Die vollständige Liste finden Sie im Kapitel Escape Characters.
String-Formatierung
Python bietet mehrere Möglichkeiten, Variablenwerte in Strings einzubetten.
f-Strings (empfohlen — Python 3.6+)
Ein f-string wird mit f oder F als Präfix versehen. Ausdrücke innerhalb von {} werden zur Laufzeit ausgewertet:
name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
# My name is Alice and I am 30 years old.
# Expressions work too
print(f"Next year I'll be {age + 1}.") # Next year I'll be 31.Methode str.format()
Prozent-Formatierung (%) (veraltet)
Älterer Python-Code verwendet die %-Formatierung. Sie werden ihr noch begegnen, aber f-Strings sind die moderne Variante:
print("Hello, %s!" % "Dave") # Hello, Dave!
print("Pi ≈ %.2f" % 3.14159) # Pi ≈ 3.14Eine vollständige Übersicht der Formatierungsoptionen finden Sie in den Kapiteln String Formatting und f-Strings.
Häufige String-Methoden
Pythons str-Typ verfügt über Dutzende von eingebauten Methoden. Die am häufigsten verwendeten sind nachfolgend aufgeführt.
Groß- und Kleinschreibung
s = "Hello, World!"
print(s.upper()) # HELLO, WORLD!
print(s.lower()) # hello, world!
print(s.capitalize()) # Hello, world!
print(s.title()) # Hello, World!
print(s.swapcase()) # hELLO, wORLD!Suchen und Zählen
s = "hello, world"
print(s.find("o")) # 4 — index of first 'o', or -1 if not found
print(s.rfind("o")) # 8 — index of last 'o'
print(s.count("l")) # 3 — total occurrences of 'l'
print(s.startswith("he")) # True
print(s.endswith("ld")) # TrueTeilstrings ersetzen
s = "I like cats. Cats are great."
print(s.replace("cats", "dogs"))
# I like dogs. Cats are great. (only lowercase 'cats' replaced)
print(s.replace("cats", "dogs").replace("Cats", "Dogs"))
# I like dogs. Dogs are great.Leerzeichen entfernen
padded = " hello "
print(padded.strip()) # 'hello' — both ends
print(padded.lstrip()) # 'hello ' — left end only
print(padded.rstrip()) # ' hello' — right end onlyAufteilen und Verbinden
csv = "apple,banana,cherry"
items = csv.split(",")
print(items) # ['apple', 'banana', 'cherry']
print(" | ".join(items)) # apple | banana | cherryString-Inhalt prüfen
Die vollständige Referenz finden Sie im Kapitel String Methods.
String-Unveränderlichkeit — ein häufiger Fallstrick
Strings können nicht direkt geändert werden. Der Versuch, einem Index zuzuweisen, löst einen TypeError aus:
s = "hello"
# s[0] = "H" # TypeError: 'str' object does not support item assignmentUm einen Teil eines Strings zu ändern, erstellen Sie einen neuen:
s = "hello"
s = "H" + s[1:] # slice off everything after index 0 and prepend "H"
print(s) # HelloDer Variablenname s zeigt nun auf ein anderes string-Objekt — das ursprüngliche "hello" bleibt unverändert (und wird vom Garbage Collector entfernt, wenn nichts anderes darauf verweist).
Strings vs. bytes
Ein Python-string (str) enthält Unicode-Text. Wenn Sie rohe Binärdaten benötigen — zum Beispiel um in eine Datei im Binärmodus zu schreiben oder Daten über ein Netzwerk zu senden — verwenden Sie stattdessen bytes:
b = b"hello" # bytes literal
s = b.decode("utf-8") # bytes → str
b2 = s.encode("utf-8") # str → bytes
print(type(b)) # <class 'bytes'>
print(type(s)) # <class 'str'>