Dateien im Agentenkontext lesen und schreiben
open(), pathlib.Path sowie das Lesen von CSV-, JSON- und TXT-Dateien aus Agent-Tools.
Dateien im Agentenkontext lesen und schreiben ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Warum Datei-I/O für Agenten wichtig ist
Agenten müssen häufig Konfigurationen lesen, Zwischenergebnisse speichern und Ausgabeberichte schreiben. Python bietet zwei grundlegende Möglichkeiten für die Arbeit mit Dateien: die integrierte Funktion open() und das moderne Modul pathlib. Beide sind unverzichtbar.
Jede Dateioperation sollte einen Kontextmanager (die with-Anweisung) verwenden, damit die Datei auch bei einem Fehler geschlossen wird.
with open('config.txt', 'w', encoding='utf-8') as f:
f.write('model=gpt-4o-mini\nmax_steps=20\n')
with open('config.txt', 'r', encoding='utf-8') as f:
content = f.read()
from pathlib import Path
content = Path('config.txt').read_text(encoding='utf-8')
print(content)Dateien mit open() lesen
Die Funktion open() erwartet einen Dateinamen und einen Modus. Zum Lesen von Text verwenden Sie den Modus 'r'. Sie können die gesamte Datei mit .read() auf einmal lesen, sie mit .readline() Zeile für Zeile lesen oder mit .readlines() alle Zeilen in eine Liste einlesen.
Geben Sie immer encoding='utf-8' an, um plattformspezifische Überraschungen bei der Zeichenkodierung zu vermeiden.
with open('report.txt', 'w', encoding='utf-8') as f:
f.write('Quarterly agent report body text.')
with open('large_log.txt', 'w', encoding='utf-8') as f:
f.write('INFO: started\nERROR: timeout\nINFO: done\n')
with open('tasks.txt', 'w', encoding='utf-8') as f:
f.write('task one\ntask two\n')
with open('report.txt', 'r', encoding='utf-8') as f:
full_text = f.read()
print(f'Read {len(full_text)} characters')
with open('large_log.txt', 'r', encoding='utf-8') as f:
for line in f:
line = line.rstrip('\n')
if 'ERROR' in line:
print('Found error:', line)
with open('tasks.txt', 'r', encoding='utf-8') as f:
tasks = f.readlines()
tasks = [t.strip() for t in tasks]
print('Tasks:', tasks)Dateien mit open() schreiben
Verwenden Sie den Modus 'w' zum Schreiben (erstellt eine Datei oder überschreibt sie), 'a' zum Anhängen und 'x' zum exklusiven Erstellen (schlägt fehl, wenn die Datei bereits vorhanden ist). Der Modus 'w' leert die Datei zuerst – gehen Sie daher mit vorhandenen Daten vorsichtig um.
# Write a new file (or overwrite)
results = ['Task 1 complete', 'Task 2 complete', 'Task 3 failed']
with open('results.txt', 'w', encoding='utf-8') as f:
for result in results:
f.write(result + '\n')
# Append to existing file (add without overwriting)
with open('agent_log.txt', 'a', encoding='utf-8') as f:
f.write('2026-05-29 14:30: Agent completed batch\n')
# Create exclusively — error if file already exists
try:
with open('unique_report.txt', 'x', encoding='utf-8') as f:
f.write('This file is new')
except FileExistsError:
print('File already exists, skipping')
# --- demo ---
print('results.txt contents:')
with open('results.txt', encoding='utf-8') as f:
print(f.read())
# Try the exclusive create again now that the file exists
try:
with open('unique_report.txt', 'x', encoding='utf-8') as f:
f.write('This file is new')
except FileExistsError:
print('File already exists, skipping')
pathlib.Path — Moderne Dateioperationen
pathlib.Path bietet einen objektorientierten Ansatz für Dateipfade. Die Verwendung ist lesbarer als bei os.path, und plattformübergreifende Pfadtrenner werden automatisch behandelt. Für einfache Lese- und Schreibvorgänge sind read_text() und write_text() die übersichtlichste Vorgehensweise.
from pathlib import Path
base = Path('agent_workspace')
base.mkdir(exist_ok=True)
config_file = base / 'config.json'
config_file.write_text('{"model": "gpt-4o-mini"}', encoding='utf-8')
if config_file.exists():
content = config_file.read_text(encoding='utf-8')
print('Config:', content)
output = base / 'output' / 'report.txt'
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text('Agent report\nLine 2', encoding='utf-8')
Path('image.png').write_bytes(b'\x89PNG\r\n\x1a\n' + bytes(range(100)))
binary_data = Path('image.png').read_bytes()
print(f'File size: {len(binary_data)} bytes')Lesen und Schreiben von JSON-Dateien
Agenten tauschen häufig strukturierte Daten als JSON-Dateien aus. Verwenden Sie json.load(), um eine JSON-Datei zu analysieren, und json.dump(), um eine solche Datei zu schreiben. Verwenden Sie für eine menschenlesbare Ausgabe immer indent=2 und ensure_ascii=False, damit Unicode-Zeichen erhalten bleiben.
import json
from pathlib import Path
config_path = Path('agent_config.json')
config_path.write_text(json.dumps({'max_retries': 5, 'model': 'gpt-4o-mini'}), encoding='utf-8')
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
print('Max retries:', config.get('max_retries', 3))
print('Model:', config.get('model', 'gpt-4o-mini'))
results = {
'run_id': 'run-001',
'status': 'completed',
'items_processed': 142,
'errors': []
}
with open('results.json', 'w', encoding='utf-8') as f:
json.dump(results, f, indent=2, ensure_ascii=False)
print('Results written to results.json')Kontextmanager – der richtige Weg
Die with-Anweisung (Kontextmanager) garantiert, dass die Datei geschlossen wird, sobald der Block verlassen wird – auch wenn während des Lesens eine Ausnahme auftritt. Ohne sie können Dateien geöffnet bleiben und Dateideskriptoren verloren gehen, was auf Systemen mit einer Begrenzung für Dateihandles zu Abstürzen führen kann.
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('sample content')
f = open('data.txt', 'r')
try:
content = f.read()
finally:
f.close()
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read()
with open('input.txt', 'w', encoding='utf-8') as f:
f.write('hello\nworld\n')
with open('input.txt', 'r') as infile, \
open('output.txt', 'w') as outfile:
for line in infile:
processed = line.upper()
outfile.write(processed)
print('Done:', content)Arbeiten mit Binärdateien
Verwenden Sie den Modus 'rb', um Binärdateien (Bilder, PDFs, Audiodateien) zu lesen, und 'wb', um sie zu schreiben. Versuchen Sie niemals, binäre Inhalte als Text zu dekodieren – verwenden Sie mit pathlib read_bytes()/write_bytes() oder Binärmodi mit open().
from pathlib import Path
import base64
image_path = Path('screenshot.png')
image_path.write_bytes(b'\x89PNG\r\n\x1a\n' + bytes(range(50)))
image_bytes = image_path.read_bytes()
print(f'Image size: {len(image_bytes)} bytes')
image_b64 = base64.b64encode(image_bytes).decode('utf-8')
print(f'Base64 length: {len(image_b64)}')
response_bytes = b'...binary content from API...'
output_path = Path('output') / 'generated_image.png'
output_path.parent.mkdir(exist_ok=True)
output_path.write_bytes(response_bytes)
print('Wrote', output_path)Umgang mit Kodierungs- und Zeilenumbruchproblemen
Verschiedene Systeme verwenden unterschiedliche Zeilenumbruchzeichen (\n unter Linux/macOS, \r\n unter Windows). Geben Sie immer encoding='utf-8' an und überlassen Sie die Behandlung von Zeilenumbrüchen Python mit newline=None (dem Standardwert). Verwenden Sie für Dateien mit einem BOM (Byte Order Mark) encoding='utf-8-sig'.
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('hello world')
with open('windows_export.csv', 'wb') as f:
f.write('name,email\n'.encode('utf-8'))
with open('unknown_encoding.txt', 'wb') as f:
f.write('cafe resume'.encode('latin-1'))
with open('data.txt', 'r', encoding='utf-8') as f:
text = f.read()
with open('windows_export.csv', 'r', encoding='utf-8-sig') as f:
content = f.read()
try:
with open('unknown_encoding.txt', 'r', encoding='utf-8') as f:
text = f.read()
except UnicodeDecodeError:
with open('unknown_encoding.txt', 'r',
encoding='utf-8', errors='replace') as f:
text = f.read()
print('Warning: file had encoding errors (replaced with ?)')
print('All reads completed. csv content:', repr(content))Effiziente Verarbeitung Zeile für Zeile
Vermeiden Sie bei großen Dateien (Protokolldateien, Datensätzen), mit .read() alles in den Arbeitsspeicher zu laden. Iterieren Sie stattdessen direkt über das Dateiobjekt – Python liest jeweils eine Zeile und hält den Speicherverbrauch unabhängig von der Dateigröße konstant.
from pathlib import Path
def process_large_log(log_path):
error_count = 0
processed = 0
with open(log_path, 'r', encoding='utf-8') as f:
for line in f: # reads one line at a time
line = line.strip()
if not line:
continue
processed += 1
if '[ERROR]' in line:
error_count += 1
# Process error immediately without storing all lines
handle_error(line)
print(f'Processed {processed} lines, {error_count} errors')
def handle_error(line):
print(f'Error found: {line[:80]}')
# --- demo ---
with open('demo_agent.log', 'w', encoding='utf-8') as f:
f.write('[INFO] agent started\n')
f.write('[ERROR] timeout calling tool search_web\n')
f.write('[INFO] retrying\n')
f.write('[ERROR] tool search_web failed again\n')
process_large_log('demo_agent.log')
Verzeichnisse erstellen und verwalten
Stellen Sie vor dem Schreiben von Dateien sicher, dass das übergeordnete Verzeichnis vorhanden ist. Verwenden Sie Path.mkdir(parents=True, exist_ok=True), um verschachtelte Verzeichnisse ohne Fehler zu erstellen, wenn sie bereits existieren. Dies ist ein üblicher Vorbereitungsschritt am Anfang jedes Agenten, der Ausgabedateien erzeugt.
from pathlib import Path
import datetime
# Create output directory structure
today = datetime.date.today().isoformat() # '2026-05-29'
output_dir = Path('agent_output') / today / 'reports'
output_dir.mkdir(parents=True, exist_ok=True)
print(f'Output directory: {output_dir}')
# Now write files safely
for i in range(3):
report_path = output_dir / f'report_{i:02d}.json'
report_path.write_text(
'{"status": "ok"}',
encoding='utf-8'
)
# List all created files
for f in output_dir.iterdir():
print(f' {f.name}: {f.stat().st_size} bytes')Best Practices für Dateipfade in Agenten
Agenten sollten absolute Pfade oder Pfade verwenden, die relativ zu einem eindeutig festgelegten Basisverzeichnis sind. Verlassen Sie sich niemals auf das aktuelle Arbeitsverzeichnis (./), da Agenten häufig von unterschiedlichen Orten aus gestartet werden. Verwenden Sie Path(__file__).parent, um das Verzeichnis des Skripts als Basis zu erhalten.
from pathlib import Path
# Get absolute path relative to THIS script's location
SCRIPT_DIR = Path(__file__).parent
DATA_DIR = SCRIPT_DIR / 'data'
OUTPUT_DIR = SCRIPT_DIR / 'output'
# Always resolve to absolute path before use
config = DATA_DIR / 'config.json'
print('Config path:', config.resolve())
# Check if file exists before reading
if config.exists():
import json
with open(config, 'r', encoding='utf-8') as f:
settings = json.load(f)
else:
print(f'Config not found at {config.resolve()}')
settings = {}
# Safe output path
result_path = (OUTPUT_DIR / 'result.json').resolve()
print('Will write to:', result_path)Schnelltest: Kontextmanager
Testen Sie Ihr Verständnis der Best Practices für Datei-E/A.
Zusammenfassung der Datei-E/A
Sie verfügen nun über eine solide Grundlage für Dateioperationen im Agentencode:
- Verwenden Sie
open('file', 'r', encoding='utf-8')zum Lesen,'w'zum Schreiben und'a'zum Anhängen - Verwenden Sie immer die with-Anweisung, um sicherzustellen, dass Dateien geschlossen werden
- pathlib.Path bietet eine übersichtliche, plattformübergreifende Verarbeitung von Pfaden mit
read_text()/write_text() - Verwenden Sie
json.load(f)/json.dump(data, f, indent=2)für strukturierte Daten - Iterieren Sie bei großen Dateien Zeile für Zeile über die Dateien, um den Speicherverbrauch zu minimieren
- Verwenden Sie
Path(__file__).parentals Basisverzeichnis – verlassen Sie sich niemals auf cwd
Häufig gestellte Fragen
Ist die Lektion „Dateien im Agentenkontext lesen und schreiben“ kostenlos?
Ja — der vollständige Text von „Dateien im Agentenkontext lesen und schreiben“ 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 „Dateien im Agentenkontext lesen und schreiben“?
open(), pathlib.Path sowie das Lesen von CSV-, JSON- und TXT-Dateien aus 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 1 von 4.
Wie lange dauert die Lektion „Dateien im Agentenkontext lesen und schreiben“?
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
- Dateien im Agentenkontext lesen und schreiben
- Verzeichnisdurchlauf und Dateisuche
- Dateiformate verarbeiten: CSV, JSON und TXT
- Sichere Dateioperationen mit Fehlerbehandlung