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. Elj
bucle recopila una lista de cada nombre base de archivo y lo une a la ruta actual. Finalmente, eli
ciclo 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.expanduser
y / oos.path.expandvars
puede 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
*.jpg
archivos:Además, excluyendo el
.git
directorio:fuente
os.walk
sobre 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
listdir
versión es mucho más eficiente. (y esojoin
es lento)fuente