En este post aprenderás como recorrer directorios en Python con scandir.
La documentación actualizada de Python recomienda recorrer directorios en Python con scandir como método.
Scandir es un método del DirEntry que pertenece a la libreria Os
, dicho de otro modo os.scandir
, se usa para crear un iterador de los objetos del método os.DirEntry
correspondientes a los elementos que existan en el argumento path
.
Su sintaxis es:
scandir(‘path’)
El objeto que crea scandir() expone la ruta y otros atributos del archivo en el directorio.
Este método proporciona toda la información posible sobre el directorio de una sola vez, lo que evita llamadas adicionales l sistema información como sea posible sin realizar llamadas al sistema adicionales.
Las instancias de os.DirEntry, entre las que se encuentra scandir
no almacena sus resultados en estructuras de datos de larga duración; por tanto es recomendable llamar al método de scandir stat
, con la sintaxis os.stat(entry.path)
, si se necesita actualizar la información y este resultado se almacena en caché al igual que si se llama a lstat()
Este método genera excepciones del tipo OSError, que puede ser manejado como cualquier otro método en Python.
Otros artículos sobre Python
Veamos varios ejemplos de uso scandir().
# importmos os
import os
# Directorio que nos interesa recorrer
path = '/home/soluciones'
# Scaneamos el directorio y creamos un iterador de los objetos de tipo os.DirEntry
directorio = os.scandir(path)
# Listamos todos los archivos y directorios dentro de esa ruta
print("Archivos y Directorios in '% s':" % path)
for cosas in directorio :
if cosas.is_dir() or cosas.is_file():
print(entry.name)
# cosas.is_file() chequea si los elementos existentes son archivos o no
# cosas.is_dir() chequea si los elementos existentes son directorios o no
# para cerrar el iterador podemos llamar scandir.close(), no obstante este método
# es llamado de modo automatico cuando el iterador excede su capacidad o cuando
#ocurre un error al iterar
directorio.close()
En el siguiente ejemplo además de determinar si existe el objeto, definiremos con qué comienza o termina el nombre.
import os
dir = "/Users/blackmaster/Downloads/"
textos=[]
directorios_p=[]
with os.scandir(dir) as contenido:
for cosas in contenido:
#si cosas es archivo y termina en .csv lo añadimos a la varible textos
if cosas.is_file and cosas.name.endswith('.csv'):
textos.append(entry.name)
#si cosas es directorio y comienza con p lo añadimos a la varible directorios p
if cosas.is_dir and cosas.name.startswith('p'):
directorios_p.append(cosas.name)
print(textos)
print(directorios_p)
Y hasta aquí, espero modestamente, que este post ayude a alguien.
Tres cosas necesitan las ovejas para andar en manadas, el miedo al perro, la voz de amo y que la de atrás empuje por miedo a quedarse sola.
Y.