Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen
Fast jedes echte Skript liest oder schreibt eine Datei. Erfahren Sie, wie Sie Dateien sicher öffnen, den richtigen Modus auswählen, mit CSV und JSON umgehen, mithilfe von pathlib mit Pfaden arbeiten und den Fehler vermeiden, der Ihre Daten löscht.
- Öffnen Sie Dateien immer mit einem
with-Block, damit sie automatisch geschlossen werden. - Modus
"w"löscht eine vorhandene Datei. Verwenden Sie"a", um eins hinzuzufügen, oder"x", um das Überschreiben zu verweigern. - Durchlaufen Sie das Dateiobjekt, um große Dateien zu lesen, ohne alles in den Speicher zu laden.
- Übergeben Sie
encoding="utf-8"explizit und bevorzugen Siepathlibzum Erstellen von Pfaden.
Protokolle, Berichte, Konfiguration, Exporte: Früher oder später berührt jedes Skript das Dateisystem. Python-Dateiverwaltung ist zunächst einfach, aber ein paar Details entscheiden darüber, ob Ihr Code zuverlässig ist oder stillschweigend Daten zerstört.
Dieser Leitfaden behandelt Textdateien, CSV, JSON, Binärdaten und Pfade, wobei der Schwerpunkt auf sicheren Gewohnheiten liegt. Wir haben diese Beispiele unter Python 3.13 in einem temporären Ordner ausgeführt und die angezeigte Ausgabe stammt von dieser Ausführung.
Öffnen Sie Dateien mit open() und mit
Die integrierte Funktion open() gibt ein Dateiobjekt zurück. Verwenden Sie es innerhalb eines with-Blocks:
with open("notes.txt", "w", encoding="utf-8") as file:
file.write("first line\n")
file.write("second line\n")
print(file.closed)
# True
Wenn der Block endet, schließt Python die Datei, auch wenn darin ein Fehler aufgetreten ist. Ohne with müssen Sie close() selbst aufrufen, und eine Ausnahme kann diese Zeile überspringen. Die Verwendung einer Datei nach dem Schließen führt zu einem Fehler:
file.read()
# ValueError: I/O operation on closed file.
Dateimodi
Das zweite Argument zu open() sagt, was Sie vorhaben:
| Modus | Bedeutung | Wenn die Datei vorhanden ist | Wenn nicht |
|---|---|---|---|
r |
Lesen (Standard) | Öffnet es | Fehler |
w |
Schreiben | Löscht es zuerst | Erstellt es |
a |
Anhängen | Fügt am Ende hinzu | Erstellt es |
x |
Exklusive Kreation | Fehler | Erstellt es |
r+ |
Lesen und schreiben | Öffnet es | Fehler |
Fügen Sie b für Binärdaten hinzu, wie in "rb" oder "wb". Text ist die Standardeinstellung und kann auch explizit als t geschrieben werden.
Schreiben und anhängen
write() fügt keinen Zeilenumbruch hinzu, also fügen Sie \n selbst ein. Durch das Anhängen bleibt erhalten, was bereits vorhanden ist:
with open("notes.txt", "a", encoding="utf-8") as file:
file.write("third line\n")
Vergleichen Sie das mit Modus "w", der unsere drei Zeilen durch eine ersetzt hat, ohne jegliche Warnung:
with open("notes.txt", "w", encoding="utf-8") as file:
file.write("replaced\n")
# notes.txt now contains only: replaced
Wenn Sie etwas nicht überschreiben dürfen, verwenden Sie "x". In unserem Test wurde FileExistsError ausgelöst, da notes.txt bereits existierte.
Eine Datei lesen
Es gibt mehrere Möglichkeiten zum Lesen, und die richtige Wahl hängt von der Größe der Datei ab:
| Ansatz | Rückgaben | Am besten für |
|---|---|---|
file.read() |
Eine Saite mit allem | Kleine Dateien |
file.readline() |
Die nächste Zeile | Einen Header lesen |
file.readlines() |
Eine Liste von Zeilen | Kleine Dateien, die Sie als Liste benötigen |
für Zeile in der Datei |
Eine Zeile nach der anderen | Jede Größe, insbesondere große Dateien |
with open("notes.txt", encoding="utf-8") as file:
print(repr(file.read()))
# 'first line\nsecond line\n'
with open("notes.txt", encoding="utf-8") as file:
for line in file:
print(line.strip())
# first line
# second line
# third line
Beachten Sie die \n Zeichen, die in der Rohzeichenfolge enthalten sind. strip() entfernt sie. Ein Dateiobjekt merkt sich auch seine Position, sodass der Lesevorgang dort fortgesetzt wird, wo er aufgehört hat:
with open("notes.txt", encoding="utf-8") as file:
print(file.readline().strip())
print(file.readlines())
# first line
# ['second line\n', 'third line\n']
Das Durchlaufen der Datei ist die Schlüsseltechnik für große Protokolle und Exporte. Es liest jeweils eine Zeile, sodass eine Multi-Gigabyte-Datei nicht in den Speicher passen muss.
Behandeln Sie Dateifehler
Möglicherweise fehlen Dateien, sind gesperrt oder nicht lesbar. Planen Sie daher Folgendes ein:
try:
with open("missing.txt", encoding="utf-8") as file:
data = file.read()
except FileNotFoundError as error:
print(error)
# [Errno 2] No such file or directory: 'missing.txt'
| Ausnahme | Typische Ursache |
|---|---|
FileNotFoundError |
Der Pfad existiert nicht |
FileExistsError |
Modus x für eine vorhandene Datei |
Berechtigungsfehler |
Unter Windows nicht zulässig oder gesperrt |
IsADirectoryError |
Der Pfad ist ein Ordner |
UnicodeDecodeError |
Es wurde die falsche Codierung verwendet |
Versuchen Sie, die Datei zu öffnen und den Fehler abzufangen, anstatt zuerst mit exists() zu prüfen, da die Datei zwischen der Prüfung und dem Öffnen verschwinden könnte. Unser Leitfaden zur Python-Ausnahmebehandlung behandelt diesen Ansatz.
CSV-Dateien
Teilen Sie CSV-Zeilen nicht selbst durch Kommas auf, da Werte in Anführungszeichen Kommas enthalten können. Das Standardmodul csv verwaltet diese Regeln. DictWriter und DictReader sind die am besten lesbaren Optionen:
import csv
with open("orders.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=["id", "customer", "total"])
writer.writeheader()
writer.writerow({"id": 1, "customer": "Asha", "total": 1200})
writer.writerow({"id": 2, "customer": "Ben", "total": 300})
with open("orders.csv", newline="", encoding="utf-8") as file:
rows = list(csv.DictReader(file))
print(rows[0])
print(sum(int(r["total"]) for r in rows))
# {'id': '1', 'customer': 'Asha', 'total': '1200'}
# 1500
Zwei Details sind wichtig. Übergeben Sie newline="" beim Öffnen von CSV-Dateien, wie in der Dokumentation empfohlen, um leere Zeilen unter Windows zu verhindern. Und jeder Wert kommt als Zeichenfolge zurück, gerade Zahlen, weshalb wir int() in der Summe brauchten. Für umfangreiche Datenarbeiten kann eine Bibliothek wie Pandas besser geeignet sein.
JSON-Dateien
JSON ist das übliche Format für Konfigurations- und API-Daten. Es ist übersichtlich auf Python-Wörterbücher abgebildet und listet Folgendes auf:
import json
config = {"debug": True, "retries": 3, "hosts": ["a", "b"]}
with open("config.json", "w", encoding="utf-8") as file:
json.dump(config, file, indent=2)
with open("config.json", encoding="utf-8") as file:
print(json.load(file)["retries"])
# 3
Denken Sie an die Benennung: dump und load arbeiten mit Dateien, während dumps und loads mit Zeichenfolgen arbeiten. Typen wie Datumsangaben können nicht direkt gespeichert werden, daher müssen Sie sie zunächst in Zeichenfolgen konvertieren.
Arbeiten Sie mit Pfaden mithilfe von pathlib
Das Zusammenkleben von Pfaden mit Zeichenfolgen unterbricht Betriebssystemübergreifend. Das Standardmodul pathlib verwaltet Trennzeichen für Sie und bietet praktische Verknüpfungen:
from pathlib import Path
path = Path("data") / "reports" / "summary.txt"
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text("all good\n", encoding="utf-8")
print(path.read_text(encoding="utf-8").strip()) # all good
print(path.suffix, path.stem, path.exists()) # .txt summary True
print(sorted(p.name for p in Path(".").glob("*.csv")))
# ['orders.csv']
| Aufgabe | pathlib |
|---|---|
| Pfade verbinden | Pfad("a") / "b.txt" |
| Erstellen Sie Ordner | path.mkdir(parents=True, exist_ok=True) |
| Lesen oder schreiben Sie den gesamten Text | read_text(), write_text() |
| Dateien finden | glob("*.csv"), rglob("*.py") |
| Eine Datei löschen | path.unlink() |
| Rufen Sie den Ordner des aktuellen Skripts ab | Path(__file__).parent |
Letzteres löst ein häufiges Problem. Relative Pfade werden von dem Ort aus aufgelöst, an dem Sie das Skript ausgeführt haben, und nicht von dem Ort, an dem sich das Skript befindet. Durch die Erstellung von Pfaden ab Path(__file__).parent werden daher viele „Datei nicht gefunden“-Überraschungen vermieden.
Binärdateien
Bilder, PDFs und ZIP-Dateien sind kein Text. Öffnen Sie sie mit b, und Sie lesen und schreiben bytes, ohne dass eine Codierung erforderlich ist:
with open("pixel.bin", "wb") as file:
file.write(bytes([255, 0, 128]))
with open("pixel.bin", "rb") as file:
print(file.read())
# b'\xff\x00\x80'
Sicherer schreibt
Wenn ein Programm während des Schreibens einer wichtigen Datei abstürzt, kann das Ergebnis fehlerhaft sein. Eine gängige Lösung besteht darin, zuerst in eine temporäre Datei zu schreiben und sie dann an ihren Platz auszutauschen:
temp = Path("settings.tmp")
temp.write_text("new", encoding="utf-8")
temp.replace("settings.txt")
print(Path("settings.txt").read_text(), temp.exists())
# new False
replace() überschreibt das Ziel. Auf demselben Dateisystem erfolgt die Umbenennung im Allgemeinen atomar, sodass Leser entweder die alte oder die neue Datei sehen und nicht eine halbgeschriebene Mischung.
Tipp: Erstellen Sie niemals Dateipfade direkt aus Benutzereingaben, ohne sie zu überprüfen. Ein Wert wie ../../secrets.txt könnte Dateien außerhalb Ihres vorgesehenen Ordners erreichen. Dies wird als Path-Traversal-Schwachstelle bezeichnet.
Ein praktisches Beispiel: Fassen Sie ein Protokoll zusammen
Dieses kurze Skript fasst mehrere Ideen zusammen. Es liest ein Protokoll zeilenweise, sodass seine Größe keine Rolle spielt, zählt jede Ebene mit Counter und schreibt eine Zusammenfassung in eine neue Datei:
from collections import Counter
counts = Counter()
with open("app.log", encoding="utf-8") as file:
for line in file:
counts[line.split()[0]] += 1
with open("summary.txt", "w", encoding="utf-8") as out:
for level, total in counts.most_common():
out.write(f"{level}: {total}\n")
# summary.txt
# ERROR: 2
# INFO: 2
# WARN: 1
Unser Beispielprotokoll hatte fünf Zeilen. Eine Leerzeile würde zum Bruch führen line.split()[0], daher sollten echte Skripte zunächst Leerzeilen überspringen.
Häufige Fehler
- Verwenden Sie
"w", wenn Sie"a"meinten. Ihre vorhandenen Daten gehen beim Öffnen sofort verloren, auch wenn Sie nie etwas schreiben. - Weglassen der Kodierung. Die Standardeinstellung variiert je nach System, sodass ein Skript, das unter Linux funktioniert, unter Windows mit akzentuiertem Text oder Emojis fehlschlagen kann.
- Aufruf von
read()bei großen Dateien. Dies kann den Speicher erschöpfen, also durchlaufen Sie stattdessen eine Schleife über Zeilen. - Vergessen von
int()bei CSV-Werten."10" + "20"ergibt"1020". - Weglassen von
newline=""für CSV. Unter Windows kann es zu unerwarteten leeren Zeilen kommen. - Dateicode wird nicht getestet. Verwenden Sie das
tmp_pathFixture von Pytest, damit Tests niemals echte Dateien berühren. Sehen Sie sich unser Pytest-Tutorial an.
Fazit
Ein paar Gewohnheiten decken hier fast alles ab: Verwenden Sie with, legen Sie die Kodierung fest, denken Sie zweimal über "w" nach und lassen Sie csv, json und pathlib die schwierigen Teile erledigen. Schreiben Sie zum Üben ein kleines Skript, das eine CSV-Datei liest, eine Spalte summiert und eine JSON-Zusammenfassung in einem neuen Ordner speichert.
Häufige Fragen
Wie lese ich eine Datei Zeile für Zeile in Python?
Öffnen Sie es in einem With-Block und durchlaufen Sie das Dateiobjekt. Dadurch wird jeweils eine Zeile gelesen, sodass es auch bei sehr großen Dateien gut funktioniert.
Was ist der Unterschied zwischen w und einem Modus?
Der Modus löscht alle vorhandenen Inhalte, sobald die Datei geöffnet wird. Modus a behält vorhandenen Inhalt bei und fügt neue Daten am Ende der Datei hinzu.
Warum sollte ich mit verwenden, um eine Datei zu öffnen?
Die with-Anweisung schließt die Datei automatisch, wenn der Block endet, auch wenn ein Fehler auftritt. Dies verhindert Lecks und trägt dazu bei, dass Daten geschrieben werden.
Wie überprüfe ich, ob eine Datei in Python existiert?
Verwenden Sie Path(“name.txt”).exists() aus pathlib. Wenn Sie vorhaben, es direkt danach zu öffnen, ist das Abfangen von FileNotFoundError in der Regel zuverlässiger als die vorherige Überprüfung.
Warum enthält meine CSV-Datei unter Windows Leerzeilen?
Sie haben die Datei wahrscheinlich ohne newline=”” geöffnet. Das CSV-Modul verwaltet die Zeilenenden selbst. Übergeben Sie daher dieses Argument, um zusätzliche Leerzeilen zu vermeiden.
Lerne weiter
Benötigen Sie Hilfe beim Testen, WordPress oder SEO?
Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.
Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung
Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.
KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert
KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…
Artikel lesen →DevOpsErklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht
Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…
Artikel lesen →SoftwareentwicklungAPI-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern
API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…
Artikel lesen →TestautomatisierungSpott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen
Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …
Artikel lesen →SoftwaretestsCode-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet
Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…
Artikel lesen →Datenbanken & SQLDELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck
DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…
Artikel lesen →Datenbanken & SQLErklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen
SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…
Artikel lesen →SoftwareentwicklungTypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler
TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…
Artikel lesen →SoftwareentwicklungPython *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen
Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…
Artikel lesen →SoftwareentwicklungPython-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet
Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…
Artikel lesen →Künstliche IntelligenzWas sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können
Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…
Artikel lesen →DevOpsÜberwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces
Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…
Artikel lesen →DevOpsDocker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten
Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…
Artikel lesen →TestautomatisierungTDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte
TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…
Artikel lesen →SoftwaretestsBenutzerakzeptanztests (UAT): Prozess, Checkliste und reale Beispiele
Benutzerakzeptanztests erklärt: Wer führt ihn durch, wie unterscheidet er sich von der Qualitätssicherung, ein siebenstufiger Prozess, eine UAT-Test…
Artikel lesen →Datenbanken & SQLErklärte SQL-NULL-Werte: IS NULL, COALESCE, NULLIF und die zu vermeidenden Fallen
SQL-NULL-Werte, die mit von uns ausgeführten Abfragen erklärt wurden: dreiwertige Logik, IS NULL, COALESCE, NULLIF, wie Aggregate, Joins und Sortier…
Artikel lesen →Datenbanken & SQLSQL CASE WHEN-Anweisung: Syntax, reale Beispiele und häufige Fehler
SQL CASE WHEN anhand der von uns ausgeführten Abfragen erklärt: einfache und durchsuchte Formulare, Bedingungsreihenfolge, Pivots mit SUM, COUNT-Tri…
Artikel lesen →SoftwareentwicklungWas ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt
Was ist JWT? JSON Web Tokens erklärt: die drei Teile, ein Token, das in dem von uns ausgeführten Code erstellt und manipuliert wurde, JWT vs. Sitzun…
Artikel lesen →SoftwareentwicklungErklärte JavaScript-Ereignisschleife: Aufrufstapel, Mikrotasks und Timer mit Beispielen
Die JavaScript-Ereignisschleife wurde mit dem von uns ausgeführten Code erklärt: Aufrufstapel, Aufgaben- und Mikrotask-Warteschlangen, warum setTime…
Artikel lesen →SoftwareentwicklungErklärung von Python-Generatoren und -Ertrag: Sparen Sie Speicher mit echten Beispielen
Python-Generatoren und Yield anhand des von uns ausgeführten Codes erklärt: wie sie angehalten und fortgesetzt werden, gemessene Speichereinsparunge…
Artikel lesen →Künstliche IntelligenzWas sind Einbettungen? Vektoren und Kosinusähnlichkeit einfach erklärt
Was sind Einbettungen? Ein Leitfaden in einfacher Sprache zu Vektoren, Kosinusähnlichkeit und semantischer Suche, mit einem kleinen Beispiel, das wi…
Artikel lesen →DevOpsBlau-Grün vs. Canary-Bereitstellung: Unterschiede, Kompromisse und Auswahl
Blue-Green vs. Canary-Bereitstellung erklärt: Funktionsweise, Kosten, Risiko und Rollback, stabiles Benutzer-Bucketing, das wir getestet haben, Date…
Artikel lesen →TestautomatisierungFlaky-Tests: Was sie verursacht und wie man sie endgültig behebt
Flaky-Tests wurden anhand von Demos erklärt, die wir durchgeführt haben: die Hauptursachen, wie man sie bestätigt und diagnostiziert, richtige Korre…
Artikel lesen →SoftwaretestsLasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele
Erläuterungen zu Lasttests und Stresstests: Was die einzelnen Tests beweisen, Spike- und Soak-Tests, welche Kennzahlen wichtig sind, warum Durchschn…
Artikel lesen →SoftwaretestsTestfall vs. Testszenario: Hauptunterschiede, Beispiele und wann man sie jeweils verwendet
Testfall vs. Testszenario erklärt: klare Definitionen, eine Tabelle nebeneinander, eine Funktion zum Zurücksetzen von Passwörtern, die von Szenarios…
Artikel lesen →Datenbanken & SQLSQL-Abfrageoptimierung: Ausführungspläne lesen und langsame Abfragen mit Zeitvorgaben beheben
An einer Million Zeilen getestete SQL-Abfrageoptimierung: Ausführungspläne lesen, die richtigen Indizes hinzufügen, nicht sargierbare Filter korrigi…
Artikel lesen →Datenbanken & SQLSQL UNION vs. UNION ALL: Unterschiede, Beispiele und getestete Leistung
SQL UNION vs. UNION ALL anhand der von uns ausgeführten Abfragen erklärt: Duplikate, die Regeln, denen beide folgen, ein echter Datenfehler, gemesse…
Artikel lesen →SoftwareentwicklungTutorial zur JavaScript-Abruf-API: GET, POST, Fehlerbehandlung und Zeitüberschreitungen
Ein JavaScript-Abruf-API-Tutorial, das auf einem lokalen Server getestet wurde: GET und POST, warum 404 nicht ausgelöst wird, ein wiederverwendbarer…
Artikel lesen →SoftwareentwicklungUmgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen
Die Handhabung von Python-Dateien wird anhand des von uns ausgeführten Codes erklärt: Öffnungsmodi, Lesen großer Dateien, CSV, JSON, Pathlib, Binärd…
Artikel lesen →SoftwareentwicklungGit merge vs rebase: Unterschiede, Beispiele und wann man was nutzt
Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.
Artikel lesen →SoftwareentwicklungPython List Comprehension: Syntax, Beispiele und wann man darauf verzichtet
Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…
Artikel lesen →Datenbanken & SQLSQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)
SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…
Artikel lesen →