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}
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 officielle
def lire_fichier_simule(chemin, systeme_fichiers, max_taille=100000):
if chemin not in systeme_fichiers:
return {"succes": False, "erreur": f"Le fichier n'existe pas : {chemin}"}
contenu = systeme_fichiers[chemin]
taille = len(contenu.encode("utf-8"))
if taille > max_taille:
return {"succes": False, "erreur": f"Fichier trop volumineux : {taille} octets (max: {max_taille})"}
return {"succes": True, "contenu": contenu, "chemin": chemin, "taille": taille}