Desafío: Búsqueda Recursiva de Archivos
Trabajo con diccionarios anidados
En Python, los diccionarios pueden contener otros diccionarios. Esto es útil para representar estructuras jerárquicas como un sistema de archivos.
Para navegar un diccionario:
Utiliza items()
para iterar a través de todos los pares clave-valor:
file_system = { "home": { "resume.pdf": "file", "notes.txt": "file" }, "etc": { "config.yaml": "file" } } for name, content in file_system.items(): print(name, "->", content)
Utiliza isinstance(content, dict) para comprobar si un valor es en sí mismo un diccionario (es decir, una carpeta, no un archivo):
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
Imagina la necesidad de verificar si un archivo existe dentro de una estructura de diccionario anidado que representa un sistema de archivos. Implementa una función file_exists
que navegue recursivamente a través de carpetas (objetos diccionario) y busque un archivo (representado por la cadena "file"
). Devuelve True
si se encuentra el archivo; de lo contrario, devuelve False
.
- Utiliza un bucle
for
para iterar sobre todos los elementos del diccionariofile_system
usando el métodoitems()
. Esto recupera la clave (name
) y el valor (content
). - Verifica si
content
es un archivo (es decir, la cadena"file"
) y siname
coincide contarget
(el nombre del archivo que se está buscando). - Si se cumplen ambas condiciones, devuelve
True
, indicando que se ha encontrado el archivo. - Si el contenido no es un archivo, verifica si es una carpeta.
Utiliza la función
isinstance()
, pasandocontent
como primer argumento ydict
como segundo (lo que comprueba si el elemento es un diccionario). - Si
content
es una carpeta, llama recursivamente afile_exists
con los parámetros necesarios para continuar la búsqueda dentro de ella. - Si la llamada recursiva devuelve
True
, el archivo ha sido encontrado, por lo que devuelveTrue
. - Si no se encuentran coincidencias después de revisar todas las carpetas y archivos, devuelve
False
.
Solución
¡Gracias por tus comentarios!