Strings in Python: die Methoden split, replace, strip, join, Slices und f-Strings
Ein String in Python (Typ str) ist eine unveränderliche Folge von Unicode-Zeichen. Die Methode split() zerlegt eine Zeichenkette in eine Liste, join() setzt sie wieder zusammen, replace() ersetzt Teilzeichenketten, strip() entfernt Leerzeichen am Rand; jede Methode liefert einen neuen String. Werte fügen Sie am besten mit einem f-String ein: f"{name}: {price:.2f}".
Strings in Python kommen in jedem Programm vor: Eingaben des Benutzers, Dateinamen, Zeilen aus CSV-Dateien, Antworten von APIs. Der Typ str speichert Text in Unicode, deshalb funktionieren Umlaute und Emojis ohne weitere Einstellungen. Die gefragtesten Methoden sind split, replace, strip und join, und Werte geben Sie am bequemsten mit f-Strings aus. Wir sehen uns das an Beispielen an.
Wie ein String in Python aufgebaut ist
Einen String schreibt man in einfachen oder doppelten Anführungszeichen. Es gibt keinen Unterschied: 'Kaffee' und "Kaffee" sind identisch. Dreifache Anführungszeichen erzeugen einen mehrzeiligen String, in dem Zeilenumbrüche erhalten bleiben.
name = "Kaffee"
note = """Erste Zeile
Zweite Zeile"""
print(len(name)) # 6 — Länge des Strings in Zeichen
Die wichtigste Eigenschaft von Strings ist die Unveränderlichkeit. Eine Methode ändert den String nicht, sondern liefert einen neuen zurück. Deshalb bewirkt s.replace("a", "b") ohne Zuweisung nichts. Sie müssen s = s.replace("a", "b") schreiben. Das ist der häufigste Fehler von Einsteigern.
Sonderzeichen, Zeilenumbruch und Raw-Strings
Einen Zeilenumbruch schreiben Sie als \n, einen Tabulator als \t, einen Backslash als \\. Das Präfix r macht einen String zu einem Raw-String: Backslashes darin werden nicht verarbeitet. Das ist praktisch für Windows-Pfade und reguläre Ausdrücke.
print("Summe:\n350 €")
path = r"C:\neu\tabelle.csv" # \n und \t werden nicht zu Sonderzeichen
Einen langen Ausdruck können Sie in Klammern auf mehrere Zeilen verteilen. Benachbarte Stringliterale in Klammern fügt Python selbst zusammen.
split: einen String in eine Liste zerlegen
Die Methode split() teilt einen String an einem Trennzeichen und liefert eine Liste. Ohne Argument trennt sie an beliebigen Leerzeichen und ignoriert mehrfache Leerzeichen. Das eignet sich gut für die Analyse von Befehlen.
"add Kaffee 250".split() # ['add', 'Kaffee', '250']
"2026-10-16".split("-") # ['2026', '10', '16']
"a,b,,c".split(",") # ['a', 'b', '', 'c']
"key=value=x".split("=", 1) # ['key', 'value=x']
Achten Sie auf den Unterschied: Bei einem ausdrücklich angegebenen Trennzeichen bleiben leere Teile erhalten. Das zweite Argument maxsplit begrenzt die Anzahl der Schnitte, und rsplit() schneidet von rechts. Um einen Text in Zeilen zu zerlegen, verwenden Sie splitlines(). Die Methode versteht sowohl \n als auch \r\n und lässt kein leeres Element am Ende stehen.
text = "Kaffee\nTaxi\n"
text.split("\n") # ['Kaffee', 'Taxi', '']
text.splitlines() # ['Kaffee', 'Taxi']
join: eine Liste zu einem String zusammensetzen
join() ist die umgekehrte Operation. Sie wird auf dem Trennzeichen aufgerufen, als Argument erhält sie eine Liste von Strings:
items = ["Kaffee", "Taxi", "Mittagessen"]
print(", ".join(items)) # Kaffee, Taxi, Mittagessen
print("\n".join(items)) # jeder Punkt in einer neuen Zeile
Alle Elemente müssen Strings sein, sonst erhalten Sie TypeError: sequence item 0: expected str instance, int found. Wandeln Sie Zahlen vorher um: ", ".join(str(x) for x in amounts).
Verketten und Zusammenfügen von Strings
Zwei Strings fügen Sie mit + zusammen, wiederholen können Sie einen mit *: "-" * 20. Hunderte Teile in einer Schleife mit += zu verketten ist jedoch langsam, weil jedes Mal ein neuer String entsteht. Sammeln Sie die Teile besser in einer Liste und fügen Sie sie mit einem einzigen join() zusammen. Einen String direkt mit einer Zahl zu addieren geht nicht: "Summe: " + 5 löst einen TypeError aus, Sie brauchen str() oder einen f-String.
replace: Teilzeichenkette ersetzen
replace(old, new) ersetzt alle Vorkommen einer Teilzeichenkette. Das dritte Argument begrenzt die Anzahl der Ersetzungen.
price = "1 250,50"
price = price.replace(" ", "").replace(",", ".")
print(float(price)) # 1250.5
"a-b-c".replace("-", "+", 1) # 'a+b-c'
Die Methode unterscheidet Groß- und Kleinschreibung und sucht nach exakter Übereinstimmung. Für Ersetzungen nach einem Muster, zum Beispiel „alle Ziffern“, brauchen Sie das Modul re mit der Funktion re.sub().
strip, lstrip, rstrip: einen String kürzen
strip() entfernt Leerzeichen, Tabulatoren und Zeilenumbrüche an beiden Rändern. lstrip() bereinigt nur links, rstrip() nur rechts. Das ist der erste Schritt bei Benutzereingaben und Zeilen aus Dateien.
raw = " Kaffee \n"
raw.strip() # 'Kaffee'
raw.rstrip() # ' Kaffee'
"xxKaffeexx".strip("x") # 'Kaffee'
Das Argument legt eine Menge von Zeichen fest, keine Teilzeichenkette: "abcTextcba".strip("abc") entfernt alle Zeichen a, b und c am Rand in beliebiger Reihenfolge. Wenn Sie genau ein Präfix oder Suffix abschneiden wollen, verwenden Sie removeprefix() und removesuffix() (seit Python 3.9).
Weitere nützliche Stringmethoden
| Methode | Was sie macht | Beispiel → Ergebnis |
|---|---|---|
lower(), upper() | Groß- und Kleinschreibung | "Kaffee".lower() → 'kaffee' |
startswith(), endswith() | prüft Anfang und Ende | "a.csv".endswith(".csv") → True |
find() | Position der Teilzeichenkette oder -1 | "Kaffee".find("f") → 2 |
count() | Anzahl der Vorkommen | "Banane".count("a") → 2 |
isdigit() | nur Ziffern? | "250".isdigit() → True |
zfill() | mit Nullen auffüllen | "7".zfill(3) → '007' |
Ob ein String eine Teilzeichenkette enthält, prüft man am einfachsten mit dem Operator in: if "kaffee" in text.lower():. Strings vergleicht man mit == zeichenweise und unter Beachtung der Groß- und Kleinschreibung. Für einen Vergleich ohne Beachtung der Schreibweise wandeln Sie beide Strings mit casefold() um.
Slices von Strings
Ein String ist eine Folge, deshalb greifen Sie auf Zeichen über einen Index ab 0 zu. Ein negativer Index zählt vom Ende. Ein Slice s[start:stop:step] liefert eine Teilzeichenkette, die rechte Grenze gehört nicht dazu.
s = "Python"
s[0] # 'P'
s[-1] # 'n'
s[0:3] # 'Pyt'
s[2:] # 'thon'
s[::2] # 'Pto'
s[::-1] # 'nohtyP' — String umkehren
Ein Slice löst nie einen Fehler aus, wenn er über die Grenzen hinausgeht: s[0:100] liefert den ganzen String. Dagegen gibt s[100] einen IndexError. Ein Zeichen an einem Index können Sie nicht ändern (s[0] = "J" ergibt TypeError). Bauen Sie stattdessen einen neuen String: "J" + s[1:].
f-Strings in Python
Das Präfix f vor einem String bedeutet, dass Ausdrücke in geschweiften Klammern ausgewertet und in den Text eingesetzt werden. Das ist seit Python 3.6 die wichtigste Art, Strings zu formatieren. Er ist kürzer als format() und schneller als der alte Operator %.
item = "Kaffee"
price = 250
print(f"{item}: {price} €") # Kaffee: 250 €
print(f"Mit Rabatt: {price * 0.9} €") # Mit Rabatt: 225.0 €
print(f"{item=}") # item='Kaffee' — praktisch zum Debuggen
Zahlen formatieren und ausrichten
Nach dem Doppelpunkt innerhalb der Klammern steht eine Formatangabe. Sie legt Rundung, Tausendertrennzeichen, Breite und Ausrichtung fest:
| Schreibweise | Ergebnis | Bedeutung |
|---|---|---|
f"{3.14159:.2f}" | 3.14 | auf 2 Stellen runden |
f"{1250000:,}" | 1,250,000 | Tausendertrennzeichen |
f"{1250000:_}" | 1_250_000 | Unterstrich statt Komma |
f"{0.256:.1%}" | 25.6% | Prozent |
f"{'Kaffee':<10}|" | Kaffee | | linksbündig, Breite 10 |
f"{250:>8}" | 250 | rechtsbündig |
f"{7:03d}" | 007 | mit Nullen auffüllen |
Die Ausrichtung eignet sich für Tabellen im Terminal: f"{name:<12}{amount:>10.2f}" richtet die Spalten exakt aus. Beachten Sie, dass Formatierung nur bei der Ausgabe nötig ist. Geld speichern Sie in Cent (int) oder mit Decimal, nicht mit float: 0.1 + 0.2 ergibt 0.30000000000000004.
Anführungszeichen und Zeilenumbruch in f-Strings
Seit Python 3.12 (PEP 701) hat der f-String eine formale Grammatik: Innerhalb der geschweiften Klammern dürfen Sie dieselben Anführungszeichen wie außen verwenden, ebenso Backslashes und Zeilenumbrüche, und die Verschachtelung ist nicht mehr begrenzt. Fehler innerhalb der Klammern zeigen jetzt die genaue Position. Auf älteren Versionen verwenden Sie innen eine andere Art von Anführungszeichen: f"{d['key']}". Einen Zeilenumbruch setzen Sie über eine eigene Variable oder chr(10).
Für mehrzeiligen Text eignet sich ein f-String in dreifachen Anführungszeichen: f"""Summe: {total}\nAnzahl: {count}""".
format() und %: alte Methoden
Im fremden Code begegnen Ihnen "{}: {}".format(item, price) und "%s: %d" % (item, price). Die Formatangaben bei format() sind dieselben wie bei f-Strings. Die Methode format() ist immer noch nützlich, wenn die Vorlage getrennt von den Daten gespeichert wird, etwa in einer Konfiguration.
Einen String zerlegen: ein praktisches Beispiel
Verbinden wir die Methoden. Angenommen, aus einer Datei kommen Zeilen wie " 2026-10-16; Kaffee ; 250,50 \n", und wir brauchen Datum, Bezeichnung und Betrag in Cent. Das übliche Vorgehen: Ränder säubern, am Trennzeichen zerlegen, jeden Teil bereinigen, Typen umwandeln.
line = " 2026-10-16; Kaffee ; 250,50 \n"
date, item, raw_amount = [p.strip() for p in line.strip().split(";")]
amount_cent = round(float(raw_amount.replace(",", ".")) * 100)
print(date, item, amount_cent) # 2026-10-16 Kaffee 25050
print(f"{item:<10}{amount_cent / 100:>10.2f}")
Gibt es nicht genau drei Teile, scheitert das Entpacken mit ValueError: not enough values to unpack oder too many values to unpack. Im echten Code sollten Sie solche Zeilen vorher prüfen oder die Ausnahme abfangen. Für echte CSV-Dateien mit Anführungszeichen und Escape-Zeichen nehmen Sie besser das Standardmodul csv statt split.
Typische Fehler mit Strings
- Das Ergebnis einer Methode wird nicht gespeichert:
s.strip()ohne Zuweisung ändert nichts. - join auf einer Liste von Zahlen —
TypeError; zuerstmap(str, ...)verwenden. - strip mit einer Teilzeichenkette: Das Argument ist eine Zeichenmenge. Für ein Präfix brauchen Sie
removeprefix(). - Vergleich mit Beachtung der Groß- und Kleinschreibung:
"Kaffee" == "kaffee"istFalse. - Backslashes in Windows-Pfaden ohne das Präfix
rwerden zu Sonderzeichen.
t-Strings: eine Vorlage statt fertigem Text
In Python 3.14 kamen t-Strings hinzu. Sie sehen aus wie f-Strings, mit dem Präfix t, aber das Ergebnis ist ein anderes: kein fertiger String, sondern ein Objekt string.templatelib.Template. Darin liegen die Textstücke (.strings) und die eingesetzten Werte (.values) getrennt.
name = "<script>"
tpl = t"Hallo, {name}!"
print(tpl.strings) # ('Hallo, ', '!')
print(tpl.values) # ('<script>',)
Wozu das gut ist: Eine Bibliothek erhält die Werte, bevor sie zusammengefügt werden, und kann sie verarbeiten, etwa spitze Klammern für HTML maskieren oder Parameter sicher an eine SQL-Abfrage übergeben. Ein f-String bietet diese Möglichkeit nicht, er hat bereits alles zusammengefügt. Für die normale Ausgabe verwenden Sie weiterhin f-Strings.
Fazit
Für die tägliche Arbeit mit Strings in Python genügt ein kleiner Satz an Werkzeugen: split() und join() zerlegen und setzen Text zusammen, strip() bereinigt Eingaben, replace() ersetzt Teile, Slices schneiden Teilzeichenketten heraus, und f-Strings geben Werte im gewünschten Format aus. Denken Sie an die Unveränderlichkeit: Eine Methode liefert einen neuen String, den Sie speichern müssen. Strings, Zahlen und f-Strings werden im Kurs am Beispiel des Ausgabentrackers in einer Lektion praktisch durchgespielt.
Häufige Fragen
Wie ermittle ich die Länge eines Strings in Python?
Die Funktion len(s) liefert die Anzahl der Zeichen. Umlaute und Emojis zählen als Unicode-Zeichen, nicht als Bytes. Die Größe in Bytes erhalten Sie mit len(s.encode("utf-8")).
Wie wandle ich eine Zahl in einen String und zurück um?
str(250) ergibt '250', und int("250") sowie float("2.5") wandeln zurück. Wenn der String keine Zahl ist, löst int() einen ValueError aus. Prüfen Sie Eingaben deshalb vorher.
Warum ändert replace meinen String nicht?
Strings sind unveränderlich, replace liefert einen neuen String. Speichern Sie das Ergebnis: s = s.replace("a", "b").
Wie prüfe ich, ob ein String leer ist?
Ein leerer String ist falsch, deshalb genügt if not s:. Kann der String nur aus Leerzeichen bestehen, prüfen Sie if not s.strip():.
Worin unterscheidet sich ein t-String von einem f-String?
Ein f-String liefert sofort einen fertigen str, ein t-String (Python 3.14+) ein Template-Objekt mit getrennten Textstücken und Werten. So lassen sich Daten für HTML und SQL sicher maskieren.
Dieses Thema wird im Kurs „Python 3.15: от новичка до профи“ ausführlich mit Praxis behandelt.
Zum Kurs