Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Outil : chercher dans les fichiers
Quand tu demandes a Claude Code "trouve ou on utilise la variable API_KEY dans le projet", il fait un grep. Il parcourt tous les fichiers, cherche le texte, et te montre les lignes correspondantes avec leur contexte.
C'est un outil indispensable. Sans lui, le LLM devrait lire chaque fichier un par un pour trouver une information. Avec une recherche, il localise instantanement ce qu'il cherche.
En vrai Python, tu peux faire un grep maison :
from pathlib import Path
for fichier in Path("src/").rglob("*.py"): for i, ligne in enumerate(fichier.read_text().splitlines(), 1): if "API_KEY" in ligne: print(f"{fichier}:{i}: {ligne.strip()}")
On travaille toujours avec le systeme de fichiers simule. Ecris une fonction chercher_dans_fichiers(terme, systeme_fichiers, dossier=".", extension=None) qui cherche un terme dans tous les fichiers du systeme simule.
La fonction doit :
Parcourir recursivement tous les fichiers du dossier indique. Chercher le terme dans chaque ligne de chaque fichier (recherche insensible a la casse). Retourner les resultats avec le chemin complet, le numero de ligne, et la ligne correspondante.
fs = {"test.py": "Ma Variable = 42"}
r = chercher_dans_fichiers("ma variable", fs)
assert r["total"] == 1, "La recherche doit etre insensible a la casse"
Filtrer par extension
fs = {
"app.py": "API_KEY = 'x'",
"readme.md": "La cle API_KEY est dans le fichier config"
}
r = chercher_dans_fichiers("API_KEY", fs, extension=".py")
assert r["total"] == 1, f"Avec extension='.py', seul app.py doit matcher, obtenu {r['total']}"
assert r["resultats"][0]["fichier"] == "app.py"
def chercher_dans_fichiers(terme, systeme_fichiers, dossier=".", extension=None):
resultats = []
def parcourir(contenu, chemin_courant):
for nom, valeur in contenu.items():
chemin_complet = f"{chemin_courant}/{nom}" if chemin_courant else nom
if isinstance(valeur, dict):
parcourir(valeur, chemin_complet)
else:
if extension and not nom.endswith(extension):
continue
lignes = valeur.split("\n")
for i, ligne in enumerate(lignes, 1):
if terme.lower() in ligne.lower():
resultats.append({
"fichier": chemin_complet,
"ligne": i,
"contenu": ligne.strip()
})
if dossier == ".":
parcourir(systeme_fichiers, "")
else:
parties = dossier.strip("/").split("/")
courant = systeme_fichiers
for partie in parties:
if not isinstance(courant, dict) or partie not in courant:
return {"succes": False, "erreur": f"Le dossier n'existe pas : {dossier}"}
courant = courant[partie]
if not isinstance(courant, dict):
return {"succes": False, "erreur": f"Le dossier n'existe pas : {dossier}"}
parcourir(courant, dossier)
return {"succes": True, "terme": terme, "resultats": resultats, "total": len(resultats)}