Como recorrer directorios en Python con scandir

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.