Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

  1. Startseite
  2. Blog
  3. Softwareentwicklung

Softwareentwicklung

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.

9 Min. Lesezeit
Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

Das Wichtigste

  • Ö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 Sie pathlib zum 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_path Fixture 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

Arbeiten Sie mit Stack Quora

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.

Lesen Sie weiter

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.

Künstliche Intelligenz

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 →
DevOps

Erklä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 →
Softwareentwicklung

API-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 →
Testautomatisierung

Spott 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 →
Softwaretests

Code-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 & SQL

DELETE 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 & SQL

Erklä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 →
Softwareentwicklung

TypeScript-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 →
Softwareentwicklung

Python *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 →
Softwareentwicklung

Python-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 Intelligenz

Was 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 →
DevOps

Docker-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 →
Testautomatisierung

TDD 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 →
Softwaretests

Benutzerakzeptanztests (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 & SQL

Erklä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 & SQL

SQL 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 →
Softwareentwicklung

Was 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 →
Softwareentwicklung

Erklä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 →
Softwareentwicklung

Erklä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 Intelligenz

Was 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 →
DevOps

Blau-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 →
Testautomatisierung

Flaky-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 →
Softwaretests

Lasttest 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 →
Softwaretests

Testfall 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 & SQL

SQL-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 & SQL

SQL 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 →
Softwareentwicklung

Tutorial 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 →
Softwareentwicklung

Umgang 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 →
Softwareentwicklung

Git 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 →
Softwareentwicklung

Python 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 & SQL

SQL 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 →