¿Cómo obtengo una lista de todos los archivos (y directorios) en un directorio dado en Python?
572
¿Cómo obtengo una lista de todos los archivos (y directorios) en un directorio dado en Python?
Esta es una manera de recorrer cada archivo y directorio en un árbol de directorios:
import os
for dirname, dirnames, filenames in os.walk('.'):
# print path to all subdirectories first.
for subdirname in dirnames:
print(os.path.join(dirname, subdirname))
# print path to all filenames.
for filename in filenames:
print(os.path.join(dirname, filename))
# Advanced usage:
# editing the 'dirnames' list will stop os.walk() from recursing into there.
if '.git' in dirnames:
# don't go into any .git directories.
dirnames.remove('.git')
for subdirname in dirnames: if subdirname != '.git'
Puedes usar
Para referencia y más funciones del sistema operativo, mira aquí:
fuente
os.scandir
Sin embargo, los documentos de Python 3 le indican que debe usarlo , ya que en muchos casos le permite evitar llamadas al sistema, lo que proporciona una aceleración gratuita (tanto IPC como IO son lentos).os.path.isdir
.Aquí hay una función auxiliar que uso con bastante frecuencia:
fuente
fuente
r'C:\temp'
es más claro y preferido que los"C:\\temp"
Rawstrings son preferibles a esclasar las barras invertidas.Si necesita habilidades de globbing, también hay un módulo para eso. Por ejemplo:
devolverá algo como:
Vea la documentación aquí .
fuente
Prueba esto:
fuente
Para archivos en el directorio de trabajo actual sin especificar una ruta
Python 2.7:
Python 3.x:
Gracias a Stam Kaly por comentar sobre python 3.x
fuente
os.listdir()
¡enumera elementos en el directorio actual por defecto! Así que no hay necesidad deos.getcwd()
:)Una implementación recursiva
fuente
Escribí una versión larga, con todas las opciones que podría necesitar: http://sam.nipl.net/code/python/find.py
Supongo que también encajará aquí:
fuente
Aquí hay otra opción.
Devuelve un iterador de objetos os.DirEntry correspondientes a las entradas (junto con la información del atributo del archivo) en el directorio proporcionado por la ruta.
Ejemplo:
El uso de scandir () en lugar de listdir () puede aumentar significativamente el rendimiento del código que también necesita información de tipo de archivo o atributo de archivo , porque los objetos os.DirEntry exponen esta información si el sistema operativo la proporciona al escanear un directorio. Todos los métodos os.DirEntry pueden realizar una llamada al sistema, pero is_dir () y is_file () generalmente solo requieren una llamada al sistema para enlaces simbólicos; os.DirEntry.stat () siempre requiere una llamada al sistema en Unix, pero solo requiere una para enlaces simbólicos en Windows.
Documentos de Python
fuente
Si
os.listdir()
bien está bien para generar una lista de nombres de archivos y directorios, con frecuencia desea hacer más una vez que tenga esos nombres, y en Python3, pathlib simplifica esas otras tareas. Echemos un vistazo y veamos si te gusta tanto como a mí.Para enumerar el contenido del directorio, construya un objeto Path y tome el iterador:
Si queremos solo una lista de nombres de cosas:
Si solo quieres los directorios:
Si desea los nombres de todos los archivos conf en ese árbol:
Si desea una lista de archivos conf en el árbol> = 1K:
Resolver rutas relativas se vuelve fácil:
Navegar con una ruta es bastante claro (aunque inesperado):
fuente
Un buen revestimiento para enumerar solo los archivos de forma recursiva. Lo utilicé en mi directiva setup.py package_data:
Sé que no es la respuesta a la pregunta, pero puede ser útil.
fuente
Para Python 2
Para Python 3
Para el filtro y el mapa, debe envolverlos con list ()
La recomendación ahora es que reemplace su uso de mapas y filtros con expresiones de generadores o comprensiones de listas:
fuente
Aquí hay una versión Pythonic de una línea:
Este código enumera la ruta completa de todos los archivos y directorios en el nombre de directorio dado.
fuente
Sé que esta es una vieja pregunta. Esta es una buena manera de encontrarme si estás en una máquina liunx.
fuente
fuente
FYI Agregue un filtro de extensión o archivo de importación import os
fuente
Si supiera que tiraría esto. Una forma simple y sucia de hacer búsquedas con comodines.
fuente
El siguiente código enumerará los directorios y los archivos dentro del directorio
fuente
El que trabajó conmigo es una especie de versión modificada de la respuesta de Saleh anterior.
El código es el siguiente:
"dir = 'given_directory_name' nombres de archivo = [os.path.abspath (os.path.join (dir, i)) para i en os.listdir (dir)]"
fuente