AI Agents · Lektion

Dateiformate verarbeiten: CSV, JSON und TXT

csv-Modul, json.load/dump und sichere Textkodierung für Agent-Tools.

Lektion 3 von 413 Schritte

Dateiformate verarbeiten: CSV, JSON und TXT ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Die drei häufigsten Dateiformate für Agenten

Agenten lesen und schreiben ständig drei Dateiformate: CSV für tabellarische Daten, JSON für strukturierte Objekte und Plain Text für Protokolle, Prompts und Berichte. Jedes Format hat eigene Anforderungen an die Analyse, Sonderfälle und Best Practices. Python bietet für alle drei eine hervorragende integrierte Unterstützung.

import csv
import json
from pathlib import Path

# Detect format from extension
def read_data_file(file_path):
    path = Path(file_path)
    if path.suffix == '.csv':
        return read_csv(path)
    elif path.suffix == '.json':
        return read_json(path)
    elif path.suffix == '.txt':
        return path.read_text(encoding='utf-8')
    else:
        raise ValueError(f'Unsupported format: {path.suffix}')

csv.reader — Grundlegendes CSV-Parsing

csv.reader analysiert eine CSV-Datei Zeile für Zeile und gibt jede Zeile als Liste von Zeichenfolgen zurück. Die Funktion verarbeitet in Anführungszeichen gesetzte Felder, enthaltene Kommas und Zeilenumbrüche innerhalb von Anführungszeichen korrekt – anders als das manuelle Aufteilen an Kommas, das bei Sonderfällen scheitert.

import csv

with open('sales.csv', 'w', newline='') as f:
    f.write('product,qty,price\nWidget,3,9.99\nGadget,1,19.99\n')

with open('sales.csv', 'r', encoding='utf-8', newline='') as f:
    reader = csv.reader(f)
    header = next(reader)
    print('Columns:', header)

    for row in reader:
        product = row[0]
        quantity = int(row[1])
        price = float(row[2])
        print(f'{product}: {quantity} units at ${price}')

csv.DictReader — Zeile als Dictionary

csv.DictReader liest jede Zeile als OrderedDict (oder als normales dict in Python 3.8+) ein, wobei die Spaltenüberschriften als Schlüssel dienen. Das ist deutlich einfacher als der Zugriff über Positionsindizes – Ihr Code bleibt auch dann lesbar, wenn die Spalten neu angeordnet werden.

import csv

with open('employees.csv', 'w', newline='') as f:
    f.write('name,department,salary\nAlice,Eng,95000\nBob,Sales,70000\n')

with open('employees.csv', 'r', encoding='utf-8', newline='') as f:
    reader = csv.DictReader(f)
    print('Fields:', reader.fieldnames)

    total_salary = 0
    for row in reader:
        name = row['name']
        department = row['department']
        salary = float(row['salary'])
        total_salary += salary
        print(f'{name} ({department}): ${salary:,.2f}')

    print(f'Total payroll: ${total_salary:,.2f}')

csv.writer und DictWriter — CSV schreiben

Verwenden Sie csv.writer, um Zeilen als Listen zu schreiben, oder csv.DictWriter, um Zeilen als Dictionaries zu schreiben. Geben Sie beim Öffnen der Datei immer newline='' an – das csv-Modul verarbeitet Zeilenenden selbst und verhindert dadurch doppelte Zeilenumbrüche unter Windows.

import csv

results = [
    {'task_id': 'T001', 'status': 'completed', 'duration_s': 12.5},
    {'task_id': 'T002', 'status': 'failed', 'duration_s': 3.1},
    {'task_id': 'T003', 'status': 'completed', 'duration_s': 45.8},
]

fieldnames = ['task_id', 'status', 'duration_s']

with open('task_results.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()  # write column names
    writer.writerows(results)

print('Wrote task_results.csv')

json.load() und json.dump() — Datei-E/A

Verwenden Sie json.load(file), um eine JSON-Datei zu analysieren, und json.dump(obj, file), um eine solche Datei zu schreiben. Diese Funktionen arbeiten mit Dateiobjekten. Verwenden Sie für Zeichenfolgen json.loads(string) und json.dumps(obj). Verwenden Sie für eine lesbare Ausgabe immer indent=2.

import json

with open('config.json', 'w', encoding='utf-8') as f:
    json.dump({'api_url': 'https://api.example.com', 'timeout': 15}, f)

with open('config.json', 'r', encoding='utf-8') as f:
    config = json.load(f)

print('API URL:', config.get('api_url'))
print('Timeout:', config.get('timeout', 30))

output_data = {
    'run_id': 'abc123',
    'items': [1, 2, 3],
    'meta': {'agent': 'v2', 'model': 'gpt-4o'}
}

with open('output.json', 'w', encoding='utf-8') as f:
    json.dump(
        output_data, f,
        indent=2,
        ensure_ascii=False
    )
print('Written output.json')

Umgang mit JSON-Analysefehlern

Fehlerhafte JSON-Dateien sind in Agenten-Pipelines häufig – etwa aufgrund unvollständiger Schreibvorgänge, abgeschnittener Downloads oder Kodierungsproblemen. Schließen Sie json.load() immer in einen try/except-Block ein und geben Sie klare Fehlermeldungen aus, die den Dateipfad zum Debuggen enthalten.

import json
from pathlib import Path

def safe_load_json(file_path):
    path = Path(file_path)
    try:
        with open(path, 'r', encoding='utf-8') as f:
            return json.load(f)
    except json.JSONDecodeError as e:
        print(f'Invalid JSON in {path}: line {e.lineno}, col {e.colno}')
        print(f'  Error: {e.msg}')
        # Show the problem area
        content = path.read_text(encoding='utf-8')
        lines = content.split('\n')
        if e.lineno <= len(lines):
            print(f'  Content: {lines[e.lineno-1][:80]}')
        return None
    except FileNotFoundError:
        print(f'File not found: {path}')
        return None

# --- demo ---
Path('good.json').write_text('{"model": "gpt-4o"}', encoding='utf-8')
Path('bad.json').write_text('{"model": "gpt-4o", }', encoding='utf-8')

print('Loading good.json:', safe_load_json('good.json'))
print('Loading bad.json:', safe_load_json('bad.json'))

JSONL-Format (JSON Lines) lesen

Viele KI-APIs und Daten-Pipelines verwenden JSONL (JSON Lines) – ein JSON-Objekt pro Zeile. Dieses Format unterstützt Streaming und lässt sich einfach Zeile für Zeile verarbeiten, ohne die gesamte Datei in den Arbeitsspeicher zu laden. Jede Zeile ist ein vollständiges, eigenständiges JSON-Objekt.

import json

with open('events.jsonl', 'w', encoding='utf-8') as f:
    f.write('{"event": "start"}\n{"event": "stop"}\nnot json\n')

results = []
with open('events.jsonl', 'r', encoding='utf-8') as f:
    for line_num, line in enumerate(f, 1):
        line = line.strip()
        if not line:
            continue
        try:
            event = json.loads(line)
            results.append(event)
        except json.JSONDecodeError as e:
            print(f'Bad JSON on line {line_num}: {e}')

print(f'Loaded {len(results)} events')

with open('output.jsonl', 'w', encoding='utf-8') as f:
    for record in results:
        f.write(json.dumps(record, ensure_ascii=False) + '\n')

Plain-Text-Dateien lesen

Plain Text ist das einfachste Format – für Protokolle, Prompts, Berichte und Konfigurationsdateien. Lesen Sie die gesamte Datei mit .read() ein oder verarbeiten Sie sie Zeile für Zeile. Verwenden Sie bei großen Dateien immer die Verarbeitung Zeile für Zeile, damit der Speicherverbrauch konstant bleibt.

from pathlib import Path

Path('system_prompt.txt').write_text('You are a helpful agent.', encoding='utf-8')
with open('agent.log', 'w', encoding='utf-8') as f:
    f.write('INFO: boot\nERROR: disk full\nCRITICAL: crash\nINFO: recovered\n')

prompt = Path('system_prompt.txt').read_text(encoding='utf-8')
print(f'Prompt length: {len(prompt)} characters')

error_lines = []
with open('agent.log', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.rstrip()
        if not line:
            continue
        if 'ERROR' in line or 'CRITICAL' in line:
            error_lines.append(line)

print(f'Found {len(error_lines)} error lines')

with open('summary.txt', 'w', encoding='utf-8') as f:
    f.write('Agent Run Summary\n')
    f.write('=' * 40 + '\n')
    for error in error_lines[:10]:
        f.write(f'  {error}\n')
print('Summary written')

Umgang mit BOM (Byte Order Mark)

Dateien, die aus Excel oder Windows-Tools exportiert wurden, beginnen häufig mit einem BOM (Byte Order Mark) – einem unsichtbaren Zeichen \ufeff. Wenn es nicht behandelt wird, beschädigt es den Namen des ersten Feldes beim CSV-Parsing. Verwenden Sie encoding='utf-8-sig', um es automatisch zu entfernen.

import csv

with open('windows_export.csv', 'wb') as f:
    f.write('name,email,age\nAlice,alice@x.com,30\n'.encode('utf-8'))
with open('file.txt', 'wb') as f:
    f.write(b'\xef\xbb\xbfhello')

with open('windows_export.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    first = next(reader)
    print(list(first.keys()))

with open('windows_export.csv', 'r', encoding='utf-8-sig') as f:
    reader = csv.DictReader(f)
    first = next(reader)
    print(list(first.keys()))

content = open('file.txt', 'rb').read()
if content.startswith(b'\xef\xbb\xbf'):
    content = content[3:]
text = content.decode('utf-8')
print('Decoded:', text)

Umgang mit Kodierungsfehlern

Beim Lesen von Dateien aus unbekannten Quellen treten häufig Kodierungsfehler auf. Der Parameter errors von open() steuert das Verhalten: 'replace' ersetzt fehlerhafte Zeichen durch ?, 'ignore' lässt sie weg und 'backslashreplace' maskiert sie. Für eine strenge Validierung verwenden Sie 'strict' (den Standardwert).

from pathlib import Path

def read_with_fallback(file_path):
    path = Path(file_path)

    # Try UTF-8 first
    try:
        return path.read_text(encoding='utf-8')
    except UnicodeDecodeError:
        pass

    # Try Latin-1 (handles most European files)
    try:
        return path.read_text(encoding='latin-1')
    except UnicodeDecodeError:
        pass

    # Last resort: replace bad characters
    text = path.read_text(encoding='utf-8', errors='replace')
    print(f'Warning: {path.name} had encoding errors (chars replaced)')
    return text

# --- demo ---
Path('notes_utf8.txt').write_text('Notes: café, naïve, résumé', encoding='utf-8')
text = read_with_fallback('notes_utf8.txt')
print(f'Read {len(text)} chars: {text!r}')

Umgang mit fehlerhaften CSV-Dateien

CSV-Dateien aus der Praxis weisen häufig Probleme auf: zusätzliche Kommas, fehlende Felder, uneinheitliche Anführungszeichen oder gemischte Trennzeichen. Verwenden Sie die Optionen quoting und error_bad_lines und schließen Sie die Zeilenanalyse in einen try/except-Block ein, um fehlerhafte Zeilen ordnungsgemäß zu überspringen.

import csv

with open('messy_data.csv', 'w', newline='') as f:
    f.write('name,email,score\nAlice,alice@x.com,88\nBob,,90\nCarol,carol@x.com,notanumber\n')

valid_rows = []
error_count = 0

with open('messy_data.csv', 'r', encoding='utf-8', newline='') as f:
    reader = csv.DictReader(f)
    expected_fields = {'name', 'email', 'score'}

    for line_num, row in enumerate(reader, start=2):
        try:
            if not all(row.get(f, '').strip() for f in expected_fields):
                raise ValueError(f'Missing required field in row {line_num}')
            score = float(row['score'])
            valid_rows.append({
                'name': row['name'].strip(),
                'email': row['email'].strip().lower(),
                'score': score
            })
        except (ValueError, KeyError) as e:
            error_count += 1
            print(f'Skipping row {line_num}: {e}')

print(f'Valid: {len(valid_rows)}, Errors: {error_count}')

Schnelltest: CSV DictReader vs reader

Testen Sie Ihr Verständnis der Optionen für das CSV-Parsing.

Zusammenfassung zur Verarbeitung von Dateiformaten

Sie können nun alle wichtigen Dateiformate für Agenten analysieren und schreiben:

  • CSV: Verwenden Sie csv.DictReader für Zeilen als Dictionaries und csv.DictWriter für die Ausgabe; beim Öffnen immer newline='' angeben
  • JSON: json.load(f) zum Analysieren und json.dump(obj, f, indent=2) zum Schreiben verwenden; JSONDecodeError abfangen
  • JSONL: Jede Zeile mit json.loads(line) lesen und analysieren; ideal für Streaming-Daten
  • Plain Text: .read() für kleine Dateien, Iteration über die Zeilen für große Dateien
  • BOM: Für aus Windows exportierte Dateien encoding='utf-8-sig' verwenden
  • Kodierungsfehler: UTF-8 versuchen, auf latin-1 zurückfallen oder errors='replace' verwenden
Kostenlos starten

Lerne AI Agents mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
60
Lektionen
239

Häufig gestellte Fragen

Ist die Lektion „Dateiformate verarbeiten: CSV, JSON und TXT“ kostenlos?

Ja — der vollständige Text von „Dateiformate verarbeiten: CSV, JSON und TXT“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Dateiformate verarbeiten: CSV, JSON und TXT“?

csv-Modul, json.load/dump und sichere Textkodierung für Agent-Tools. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Dateiformate verarbeiten: CSV, JSON und TXT“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Dateien im Agentenkontext lesen und schreiben
  2. Verzeichnisdurchlauf und Dateisuche
  3. Dateiformate verarbeiten: CSV, JSON und TXT
  4. Sichere Dateioperationen mit Fehlerbehandlung
← Zurück zu AI Agents