Lire et écrire des fichiers dans le contexte d’un agent
open(), pathlib.Path, lecture de fichiers CSV/JSON/TXT depuis les outils de l’agent.
Lire et écrire des fichiers dans le contexte d’un agent est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Pourquoi les entrées-sorties de fichiers sont importantes pour les agents
Les agents doivent souvent lire la configuration, stocker des résultats intermédiaires et écrire des rapports de sortie. Python propose deux méthodes principales pour travailler avec des fichiers : la fonction intégrée open() et le module moderne pathlib. Toutes deux sont essentielles à connaître.
Toute opération sur un fichier doit utiliser un gestionnaire de contexte (instruction with) afin de garantir la fermeture du fichier, même en cas d’erreur.
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)Lire des fichiers avec open()
La fonction open() prend un nom de fichier et un mode. Pour lire du texte, utilisez le mode 'r'. Vous pouvez lire le fichier entier d’un coup avec .read(), le lire ligne par ligne avec .readline() ou charger toutes les lignes dans une liste avec .readlines().
Indiquez toujours encoding='utf-8' afin d’éviter les problèmes d’encodage propres à certaines plateformes.
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)Écrire des fichiers avec open()
Utilisez le mode 'w' pour écrire (crée ou écrase le fichier), 'a' pour ajouter du contenu et 'x' pour créer le fichier exclusivement (échoue si le fichier existe). Le mode 'w' tronque d’abord le fichier — soyez prudent avec les données existantes.
# 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 — Opérations modernes sur les fichiers
pathlib.Path fournit une approche orientée objet des chemins de fichiers. Elle est plus lisible que os.path et gère automatiquement les séparateurs de chemin propres à chaque système. Pour les opérations simples de lecture et d’écriture, read_text() et write_text() sont l’approche la plus claire.
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')Lecture et écriture de fichiers JSON
Les agents échangent fréquemment des données structurées sous forme de fichiers JSON. Utilisez json.load() pour analyser un fichier JSON et json.dump() pour en écrire un. Utilisez toujours indent=2 pour obtenir une sortie lisible par un humain et ensure_ascii=False pour préserver les caractères Unicode.
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')Gestionnaires de contexte — La bonne méthode
L’instruction with (gestionnaire de contexte) garantit que le fichier est fermé lorsque le bloc se termine, même si une exception se produit au milieu de la lecture. Sans elle, les fichiers peuvent rester ouverts et provoquer des fuites de descripteurs de fichiers, ce qui entraîne des plantages sur les systèmes qui limitent le nombre de descripteurs ouverts.
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)Utilisation des fichiers binaires
Utilisez le mode 'rb' pour lire les fichiers binaires (images, PDF, fichiers audio) et 'wb' pour les écrire. N’essayez jamais de décoder du contenu binaire comme du texte : utilisez read_bytes()/write_bytes() avec pathlib, ou les modes binaires avec 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)Gestion de l’encodage et des retours à la ligne
Les différents systèmes utilisent des caractères de nouvelle ligne différents (\n sous Linux/macOS, \r\n sous Windows). Spécifiez toujours encoding='utf-8' et laissez Python gérer les nouvelles lignes avec newline=None (la valeur par défaut). Pour les fichiers contenant un BOM (marque d’ordre des octets), utilisez 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))Traitement efficace ligne par ligne
Pour les fichiers volumineux (fichiers journaux, jeux de données), évitez de tout charger en mémoire avec .read(). Parcourez directement l’objet fichier : Python lit une ligne à la fois, ce qui maintient une utilisation constante de la mémoire, quelle que soit la taille du fichier.
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')
Création et gestion des répertoires
Avant d’écrire des fichiers, vérifiez que le répertoire parent existe. Utilisez Path.mkdir(parents=True, exist_ok=True) pour créer des répertoires imbriqués sans générer d’erreur s’ils existent déjà. Il s’agit d’une étape de configuration courante au début de tout agent qui produit des fichiers de sortie.
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')Bonnes pratiques pour les chemins de fichiers des agents
Les agents doivent utiliser des chemins absolus ou des chemins relatifs à un répertoire de base clairement défini. Ne vous fiez jamais au répertoire de travail actuel (./), car les agents sont souvent lancés depuis des emplacements différents. Utilisez Path(__file__).parent pour obtenir le répertoire du script comme base.
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)Vérification rapide : gestionnaires de contexte
Testez votre compréhension des bonnes pratiques d’E/S de fichiers.
Récapitulatif des E/S de fichiers
Vous disposez maintenant de bases solides pour effectuer des opérations sur les fichiers dans le code des agents :
- Utilisez
open('file', 'r', encoding='utf-8')pour lire,'w'pour écrire et'a'pour ajouter - Utilisez toujours l’instruction with pour garantir la fermeture des fichiers
- pathlib.Path fournit une gestion claire et multiplateforme des chemins avec
read_text()/write_text() - Utilisez
json.load(f)/json.dump(data, f, indent=2)pour les données structurées - Parcourez les fichiers ligne par ligne pour les fichiers volumineux afin de réduire l’utilisation de la mémoire
- Utilisez
Path(__file__).parentcomme répertoire de base — ne vous fiez jamais à cwd
Questions Fréquemment Posées
La leçon « Lire et écrire des fichiers dans le contexte d’un agent » est-elle gratuite ?
Oui — le texte complet de « Lire et écrire des fichiers dans le contexte d’un agent » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Lire et écrire des fichiers dans le contexte d’un agent » ?
open(), pathlib.Path, lecture de fichiers CSV/JSON/TXT depuis les outils de l’agent. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Lire et écrire des fichiers dans le contexte d’un agent » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Lire et écrire des fichiers dans le contexte d’un agent
- Parcours des répertoires et découverte de fichiers
- Gestion des formats de fichiers : CSV, JSON et TXT
- Opérations sûres sur les fichiers avec gestion des erreurs