Skip to content

Dateien und Daten verarbeiten

Dateien lesen, schreiben und strukturierte Daten für typische Administrations- und Automatisierungsaufgaben verarbeiten.

Ein Großteil der täglichen Arbeit von Systemadministratoren besteht aus der Verarbeitung von Daten. Logdateien müssen analysiert, Konfigurationsdateien gelesen, Berichte erzeugt und Daten zwischen verschiedenen Systemen ausgetauscht werden.

Python bietet hierfür eine Vielzahl leistungsfähiger Werkzeuge. Textdateien, CSV-Dateien und JSON-Dokumente lassen sich mit wenigen Zeilen Code verarbeiten. Gleichzeitig ermöglichen die eingebauten Datenstrukturen eine komfortable Weiterverarbeitung der eingelesenen Informationen.

In diesem Kapitel lernen Sie die wichtigsten Techniken kennen, um Dateien sicher zu lesen und zu schreiben sowie strukturierte Daten effizient auszuwerten.

Diese Fähigkeiten bilden die Grundlage vieler Automatisierungs-, Monitoring- und Reporting-Lösungen.

Textdateien lesen und schreiben

Dateien öffnen und schließen

In Python öffnet man Dateien mit der Funktion open(). Dabei gibt man den Pfad und den Modus an, z.B. 'r' für Lesen oder 'w' für Schreiben. Anders als in Sprachen wie C++ oder Java muss man sich in Python nicht explizit um das Schließen der Datei kümmern, wenn man den sogenannten Kontextmanager (with-Anweisung) verwendet. Dadurch wird die Datei automatisch geschlossen, auch wenn Fehler auftreten.

# Logdatei zum Lesen öffnen
with open('/var/log/syslog', 'r', encoding='utf-8') as logfile:
    for line in logfile:
        print(line.strip())

Textdateien zeilenweise lesen

Für große Logdateien ist es wichtig, nicht die ganze Datei auf einmal in den Speicher zu laden. Python liest mit einer for-Schleife über das Dateiobjekt zeilenweise, was speichereffizient ist und auch bei sehr großen Dateien funktioniert.

with open('/var/log/syslog', 'r', encoding='utf-8') as logfile:
    for line in logfile:
        if 'ERROR' in line:
            print(line.strip())

Ganze Datei auf einmal lesen

Möchte man die gesamte Datei als Text in einer Variable speichern, kann man read() verwenden. Das ist praktisch bei kleineren Dateien, z.B. Konfigurationsdateien.

with open('config.txt', 'r', encoding='utf-8') as f:
    content = f.read()
print(content)

Textdateien schreiben

Zum Schreiben öffnet man die Datei mit Modus 'w' (überschreiben) oder 'a' (anhängen). Auch hier empfiehlt sich with für das automatische Schließen.

# Neue Logdatei schreiben
with open('error_report.log', 'w', encoding='utf-8') as report:
    report.write('Fehlerbericht vom Server\n')
    report.write('========================\n')

Beispiel: Logdatei filtern und in neue Datei schreiben

Ein typischer Anwendungsfall ist, aus einer großen Logdatei nur die Zeilen mit Fehlern herauszufiltern und in eine neue Datei zu speichern.

input_path = '/var/log/syslog'
output_path = 'error_only.log'

with open(input_path, 'r', encoding='utf-8') as infile, \
     open(output_path, 'w', encoding='utf-8') as outfile:
    for line in infile:
        if 'ERROR' in line or 'CRITICAL' in line:
            outfile.write(line)

Umgang mit Dateipfaden

Für plattformunabhängige Skripte empfiehlt sich das Modul pathlib, das Pfadoperationen komfortabel und sicher macht.

from pathlib import Path

log_dir = Path('/var/log')
log_file = log_dir / 'syslog'

with log_file.open('r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())

Hinweise zur Kodierung

Standardmäßig verwendet open() in Python 3 die Systemkodierung. Für Logdateien ist meist UTF-8 passend. Bei Problemen mit Sonderzeichen kann das explizite Setzen von encoding='utf-8' helfen.

Vergleich mit Shell-Skripten

Shell-Tools wie grep sind schnell und praktisch für einfache Filteraufgaben. Python bietet jedoch mehr Flexibilität, z.B. komplexe Auswertungen, Kombination mit anderen Datenquellen oder automatisierte Berichte, alles in einem Skript.

Zusammenfassung

  • Verwenden Sie with open(...) as f: für sicheren und automatischen Umgang mit Dateien.
  • Lesen Sie große Dateien zeilenweise, um Speicher zu schonen.
  • Schreiben Sie Ausgaben in separate Dateien, um Logs zu filtern oder Berichte zu erstellen.
  • Nutzen Sie pathlib für plattformunabhängige Pfadoperationen.
  • Achten Sie auf korrekte Textkodierung, um Fehler mit Sonderzeichen zu vermeiden.

CSV-Dateien verarbeiten

CSV-Dateien mit dem csv-Modul lesen

CSV-Dateien (Comma-Separated Values) sind ein weit verbreitetes Format für tabellarische Daten, z. B. Serverlogs, Inventarlisten oder Monitoring-Daten. Python bietet mit dem eingebauten Modul csv eine einfache und zuverlässige Möglichkeit, CSV-Dateien zu lesen und zu schreiben.

Ein typisches Beispiel: Eine Logdatei mit Serverzugriffen im CSV-Format, die wir analysieren wollen:

zeit,benutzer,aktion,erfolg
2024-06-01 08:15:23,admin,login,True
2024-06-01 08:17:45,guest,download,False
2024-06-01 08:20:10,admin,upload,True

So lesen Sie diese Datei ein und verarbeiten sie zeilenweise:

import csv

with open('zugriffe.csv', encoding='utf-8') as datei:
    reader = csv.DictReader(datei)  # Liest jede Zeile als Wörterbuch
    for zeile in reader:
        zeit = zeile['zeit']
        benutzer = zeile['benutzer']
        aktion = zeile['aktion']
        erfolg = zeile['erfolg'] == 'True'
        print(f"{zeit}: {benutzer} hat {aktion} ausgeführt (Erfolg: {erfolg})")

Warum DictReader? - Er ordnet automatisch Spaltenüberschriften zu, was den Code lesbarer macht. - Im Vergleich zu Shell-Skripten ist so die Verarbeitung strukturierter und weniger fehleranfällig.

CSV-Dateien schreiben

Für Berichte oder Datenexporte erzeugen Sie CSV-Dateien ebenfalls mit csv:

import csv

bericht = [
    {'benutzer': 'admin', 'aktionen': 5, 'erfolgreich': 5},
    {'benutzer': 'guest', 'aktionen': 3, 'erfolgreich': 2},
]

with open('bericht.csv', 'w', newline='', encoding='utf-8') as datei:
    feldnamen = ['benutzer', 'aktionen', 'erfolgreich']
    writer = csv.DictWriter(datei, fieldnames=feldnamen)
    writer.writeheader()  # Schreibt die Kopfzeile
    writer.writerows(bericht)  # Schreibt alle Zeilen

Hinweis: Der Parameter newline='' verhindert Probleme mit Zeilenumbrüchen, die unter Windows auftreten können.

Praxis: Logdatei filtern und zusammenfassen

Angenommen, Sie wollen alle fehlgeschlagenen Aktionen aus einer Logdatei extrahieren und als CSV speichern:

import csv

with open('zugriffe.csv', encoding='utf-8') as eingabe, \
     open('fehlgeschlagen.csv', 'w', newline='', encoding='utf-8') as ausgabe:
    reader = csv.DictReader(eingabe)
    writer = csv.DictWriter(ausgabe, fieldnames=reader.fieldnames)
    writer.writeheader()
    for zeile in reader:
        if zeile['erfolg'] != 'True':
            writer.writerow(zeile)

Best Practices für CSV-Verarbeitung

  • Encoding immer angeben: UTF-8 ist Standard und vermeidet Probleme mit Umlauten.
  • with-Anweisung verwenden: Sorgt für automatisches Schließen der Dateien.
  • DictReader/DictWriter bevorzugen: Klarer und leichter wartbar als Listenindexierung.
  • Große Dateien zeilenweise verarbeiten: Vermeidet hohen Speicherverbrauch.

Vergleich mit Shell-Skripten

Shell-Tools wie awk oder cut sind schnell für einfache Extraktionen, aber Python bietet:

  • Bessere Lesbarkeit und Wartbarkeit
  • Einfachere Fehlerbehandlung
  • Leichte Erweiterbarkeit (z. B. komplexere Filter, Aggregationen)

Damit ist Python ideal für Automatisierungsskripte, die über einfache Textmanipulation hinausgehen.


Mit diesen Grundlagen können Sie CSV-Daten aus Logs, Inventarlisten oder Monitoring-Tools effizient verarbeiten und eigene Berichte erstellen – ein wichtiger Baustein für Ihre Automatisierungsaufgaben.

JSON-Dateien verarbeiten

JSON verstehen und warum es wichtig ist

JSON (JavaScript Object Notation) ist ein einfaches, textbasiertes Format, um strukturierte Daten auszutauschen. Es ist in der Administration besonders nützlich, weil viele moderne Systeme und APIs JSON verwenden – etwa Cloud-Dienste, Monitoring-Tools oder Konfigurationsdateien.

Anders als klassische INI- oder XML-Dateien ist JSON leicht lesbar und direkt in Python als Datenstruktur nutzbar. Das macht es ideal für Automatisierungsskripte, die mit externen Systemen kommunizieren oder komplexe Konfigurationen verarbeiten.

JSON-Dateien in Python lesen

Python bietet das eingebaute Modul json, mit dem Sie JSON-Dateien unkompliziert einlesen können. Dabei wird der JSON-Text in Python-Datenstrukturen wie Dictionaries und Listen umgewandelt.

import json

# Beispiel: Serverinventar aus JSON-Datei laden
with open('server_inventar.json', 'r', encoding='utf-8') as datei:
    inventar = json.load(datei)  # JSON wird als Python-Datenstruktur geladen

# Zugriff auf Daten
for server in inventar['server']:
    print(f"Hostname: {server['hostname']}, IP: {server['ip']}")

Hinweis: Verwenden Sie immer with open(...) für den sicheren Umgang mit Dateien. So wird die Datei automatisch geschlossen, auch bei Fehlern.

JSON-Dateien schreiben

Ebenso einfach ist das Speichern von Daten in JSON-Dateien. Das ist nützlich, wenn Sie z.B. Berichte oder Konfigurationsänderungen automatisiert erzeugen wollen.

import json

# Beispiel: Monitoring-Ergebnis als JSON speichern
monitoring_ergebnis = {
    "host": "webserver01",
    "status": "OK",
    "services": ["nginx", "ssh", "docker"]
}

with open('monitoring_report.json', 'w', encoding='utf-8') as datei:
    json.dump(monitoring_ergebnis, datei, indent=4)  # schön formatiert speichern

Praktische Tipps für die Arbeit mit JSON

  • Encoding beachten: JSON-Dateien sind meist UTF-8-codiert. Öffnen Sie Dateien daher immer mit encoding='utf-8', um Probleme mit Sonderzeichen zu vermeiden.
  • Indentation für Lesbarkeit: Beim Schreiben hilft indent=4, die Datei übersichtlich zu formatieren. Das erleichtert manuelle Prüfungen.
  • Fehler abfangen: JSON-Dateien können fehlerhaft sein. Nutzen Sie try-except, um z.B. json.JSONDecodeError abzufangen und Fehlermeldungen auszugeben.

Beispiel: Konfigurationsdatei lesen und anpassen

Viele Tools speichern Einstellungen in JSON. Hier ein Beispiel, wie Sie eine Konfigurationsdatei laden, ändern und speichern.

import json

config_path = 'app_config.json'

try:
    with open(config_path, 'r', encoding='utf-8') as f:
        config = json.load(f)
except FileNotFoundError:
    print(f"Konfigurationsdatei {config_path} nicht gefunden.")
    config = {}
except json.JSONDecodeError as e:
    print(f"Fehler beim Lesen der JSON-Datei: {e}")
    config = {}

# Konfiguration anpassen
config['logging']['level'] = 'DEBUG'

# Änderungen speichern
with open(config_path, 'w', encoding='utf-8') as f:
    json.dump(config, f, indent=4)

print("Konfiguration aktualisiert.")

JSON vs. Shell-Skripte

Shell-Skripte können JSON nur schwer parsen oder erzeugen. Python bietet hier klare Vorteile: - Direkte Umwandlung von JSON in Python-Datenstrukturen - Einfaches Lesen und Schreiben komplexer Daten - Bessere Fehlerbehandlung


Mit diesen Grundlagen sind Sie bestens gerüstet, um JSON-Daten in Ihrem Automatisierungsalltag sicher und effizient zu nutzen.