Défi : Recherche de Fichiers Récursive
Travail avec des dictionnaires imbriqués
En Python, les dictionnaires peuvent contenir d'autres dictionnaires. Cela est utile pour représenter des structures hiérarchiques comme un système de fichiers.
Pour naviguer dans un dictionnaire :
Utiliser items()
pour itérer sur toutes les paires clé-valeur :
file_system = { "home": { "resume.pdf": "file", "notes.txt": "file" }, "etc": { "config.yaml": "file" } } for name, content in file_system.items(): print(name, "->", content)
Utiliser isinstance(content, dict) pour vérifier si une valeur est elle-même un dictionnaire (c'est-à-dire un dossier, et non un fichier) :
file_system = { "home": { "resume.pdf": "file" }, "config.yaml": "file" } for name, content in file_system.items(): if isinstance(content, dict): print(name, "is a folder") else: print(name, "is a file")
Swipe to start coding
Imaginez devoir vérifier si un fichier spécifique existe dans une structure de dictionnaire imbriquée représentant un système de fichiers. Implémentez une fonction file_exists
qui navigue récursivement à travers les dossiers (objets dictionnaires) et recherche un fichier (représenté par la chaîne de caractères "file"
). Retournez True
si le fichier est trouvé ; sinon, retournez False
.
- Utilisez une boucle
for
pour itérer sur tous les éléments du dictionnairefile_system
en utilisant la méthodeitems()
. Cela permet de récupérer la clé (name
) et la valeur (content
). - Vérifiez si
content
est un fichier (c'est-à-dire la chaîne de caractères"file"
) et siname
correspond àtarget
(le nom du fichier recherché). - Si les deux conditions sont remplies, retournez
True
, indiquant que le fichier a été trouvé. - Si
isinstance()
n'est pas un fichier, vérifiez s'il s'agit d'un dossier. Utilisez la fonctioncontent
, en passantdict
comme premier argument etcontent
comme second (ce qui vérifie si l'élément est un dictionnaire). - Si content est un dossier, appelez récursivement
file_exists
avec les paramètres nécessaires pour continuer la recherche à l'intérieur. - Si l'appel récursif retourne
True
, le fichier a été trouvé, donc retournezTrue
. - Si aucune correspondance n'est trouvée après avoir vérifié tous les dossiers et fichiers, retournez
False
.
Solution
Merci pour vos commentaires !