Estoy tratando de hacer un script para enumerar todos los directorios, subdirectorios y archivos en un directorio dado.
Intenté esto:
import sys,os
root = "/home/patate/directory/"
path = os.path.join(root, "targetdirectory")
for r,d,f in os.walk(path):
for file in f:
print os.path.join(root,file)
Desafortunadamente no funciona correctamente.
Obtengo todos los archivos, pero no sus rutas completas.
Por ejemplo, si la estructura dir sería:
/home/patate/directory/targetdirectory/123/456/789/file.txt
Imprimiría:
/home/patate/directory/targetdirectory/file.txt
Lo que necesito es el primer resultado. Cualquier ayuda sería muy apreciada! Gracias.

Por si acaso ... Obtener todos los archivos en el directorio y subdirectorios que coincidan con algún patrón (* .py por ejemplo):
fuente
Aquí hay una frase:
El
val for sublist in ...bucle más externo aplana la lista para que sea unidimensional. Eljbucle recopila una lista de cada nombre base de archivo y lo une a la ruta actual. Finalmente, eliciclo itera sobre todos los directorios y subdirectorios.Este ejemplo utiliza la ruta codificada
./en laos.walk(...)llamada, puede complementar cualquier cadena de ruta que desee.Nota:
os.path.expandusery / oos.path.expandvarspuede usarse para cadenas de rutas como~/Extendiendo este ejemplo:
Es fácil agregar en las pruebas de nombre de base de archivo y pruebas de nombre de directorio.
Por ejemplo, prueba de
*.jpgarchivos:Además, excluyendo el
.gitdirectorio:fuente
os.walksobre un bucle de dirlisting manual, los generadores son geniales, ve a usarlos.No se pudo comentar, así que escribe la respuesta aquí. Esta es la línea más clara que he visto:
fuente
Puedes echar un vistazo a esta muestra que hice. Utiliza la función os.path.walk, que está en desuso, tenga cuidado. Utiliza una lista para almacenar todas las rutas de archivo
fuente
Un poco más simple:
fuente
Como cada ejemplo aquí solo está usando
walk(conjoin), me gustaría mostrar un buen ejemplo y una comparación conlistdir:Como puede ver por usted mismo, la
listdirversión es mucho más eficiente. (y esojoines lento)fuente