Exercices Projets guidés Outil : lire un fichier
🎉

Bravo!

Débutant 🧠 Fondamentaux 10 XP 0 personnes ont réussi

Outil : lire un fichier

Claude Code peut lire n'importe quel fichier de ton projet pour comprendre ton code. Quand tu lui dis "corrige le bug dans app.py", il commence par lire le fichier. Sans cette capacite, il serait aveugle.

Tu vas creer le premier outil de ton assistant : lire un fichier. Dans le jargon LLM, un "outil" (ou "tool") c'est une fonction que le modele peut appeler. Le modele ne peut pas lui-meme lire un fichier, mais il peut DEMANDER a ton programme de le faire, recevoir le contenu, et l'analyser.

Pour lire un fichier en Python, on utilise pathlib (plus moderne que os.path) :

from pathlib import Path

chemin = Path("mon_fichier.py")

if chemin.exists():
contenu = chemin.read_text(encoding="utf-8")

# Taille du fichier en octets :
taille = chemin.stat().st_size

Ecris une fonction lire_fichier(chemin, max_taille=100000) qui prend un chemin de fichier (string) et une taille maximale en octets (par defaut 100 000, soit environ 100 Ko).

La fonction doit :

Verifier que le fichier existe. Si non, renvoyer un dictionnaire d'erreur.
Verifier que le fichier ne depasse pas max_taille. Si oui, renvoyer un dictionnaire d'erreur avec la taille reelle.
Lire et renvoyer le contenu dans un dictionnaire de succes.

Format de retour en cas de succes :

{"succes": True, "contenu": "le contenu du fichier", "chemin": "/chemin/absolu", "taille": 1234}

Format de retour en cas d'erreur :

{"succes": False, "erreur": "Le fichier n'existe pas : mon_fichier.py"}
{"succes": False, "erreur": "Fichier trop volumineux : 500000 octets (max: 100000)"}

On va simuler le systeme de fichiers dans les tests avec un dictionnaire, donc ecris aussi une version simulee pour le sandbox : lire_fichier_simule(chemin, systeme_fichiers, max_taille=100000) ou systeme_fichiers est un dictionnaire {chemin: contenu}.

Exemple :

fs = {"app.py": "print('hello')", "data.csv": "a" * 200000}

lire_fichier_simule("app.py", fs)
renvoie {"succes": True, "contenu": "print('hello')", "chemin": "app.py", "taille": 14}

lire_fichier_simule("absent.py", fs)
renvoie {"succes": False, "erreur": "Le fichier n'existe pas : absent.py"}

lire_fichier_simule("data.csv", fs, max_taille=100000)
renvoie {"succes": False, "erreur": "Fichier trop volumineux : 200000 octets (max: 100000)"}

Tests (4/5)

Lire un fichier existant
fs = {"app.py": "print('hello')", "readme.md": "# Mon projet"}
r = lire_fichier_simule("app.py", fs)
assert r["succes"] == True, "La lecture doit reussir pour un fichier existant"
assert r["contenu"] == "print('hello')"
assert r["chemin"] == "app.py"
assert r["taille"] == len("print('hello')".encode("utf-8"))
Fichier inexistant
fs = {"app.py": "code"}
r = lire_fichier_simule("absent.py", fs)
assert r["succes"] == False, "Doit echouer pour un fichier inexistant"
assert "absent.py" in r["erreur"], "L'erreur doit mentionner le nom du fichier"
Fichier trop volumineux
fs = {"gros.txt": "x" * 500}
r = lire_fichier_simule("gros.txt", fs, max_taille=100)
assert r["succes"] == False, "Doit echouer si le fichier depasse max_taille"
assert "500" in r["erreur"], "L'erreur doit mentionner la taille reelle"
assert "100" in r["erreur"], "L'erreur doit mentionner la taille max"
Fichier vide
fs = {"vide.txt": ""}
r = lire_fichier_simule("vide.txt", fs)
assert r["succes"] == True, "Un fichier vide est un fichier valide"
assert r["contenu"] == ""
assert r["taille"] == 0

+ 0 tests cachés

Indices (3 disponibles)

solution.py