¿Necesitas recuperar la lista de archivos de un directorio?

Acceder a un directorio y recuperar el contenido del mismo es algo necesario en cualquier aplicación, con Python tenemos multiples formas de hacerlo, todas ellas con apenas unas lineas.

Ya sea para hacer copias de seguridad, mostrar la lista de archivos, renombrar, abrir, recortar, … casi para cualquier operación es necesario acceder a la lista de archivos de un directorio.

Supongamos que quiero recuperar el contenido del directorio «/home/altaruru/Documentos/Garmin Activities/loaded«.

¿Como obtengo la lista de archivos?

Vamos a mostrar la forma más habitual de recuperar una lista de archivos con distintas libs.

Crearemos una función que devuelve una lista de archivos para posteriormente mostrar la lista.

opción 1 – listdir

from os import listdir
from os.path import isfile, isdir

def ls1(path):    
    return [obj for obj in listdir(path) if isfile(path + obj)]

opción 2 – scandir

from os import scandir

def ls2(path): 
    return [obj.name for obj in scandir(path) if obj.is_file()]

opción 3 – Path

from pathlib import Path

def ls3(path):
    return [obj.name for obj in Path(path).iterdir() if obj.is_file()]

opción 4 – glob

glob tiene la particularidad interesante de permitir filtrar en la misma consulta. Por ejemplo pasando por parámetro «/home/altaruru/*2018*.jpg» listará los archivos cuyo nombre contenga 2018 y de extensión jpg.

Devuelve el path absoluto

from glob import glob

def ls4(path, filtro=""):
    spath=path + filtro
    return glob(spath)    

Notas

listdir devuelve únicamente lista de nombres, es necesario utilizar otras llamadas para saber de que tipo de objeto se trata, isfile o isdir.

scandir y Path son más eficientes, devuelven más información del objeto y el rendimiento es mejor.

glob no destaca por su velocidad ni devuelve atributos, tiene la misma limitación que listdir, sin embargo, los filtros por nombre pueden resultar útiles.

Ejemplos

files=ls1("/home/altaruru/Documentos/Garmin Activities/")
for file in files:
    print(file)
files=ls2("/home/altaruru/Documentos/Garmin Activities/")
for file in files:
    print(file)
files=ls3("/home/altaruru/Documentos/Garmin Activities/")
for file in files:
    print(file)
files=ls4("/home/nuse/Documentos/Garmin Activities/", "*2018-09*.fit")
for file in files:
    print(file)

Como veis hay para todos los gustos, ya es cuestión de elegir cada cual.

Quizas te interesen estas otras entradas:

Con python puedes hacer cualquier cosa. ¿Sientes curiosidad?, echa un vistazo aquí

Saludos!

2 comentarios sobre «Python, ¿cómo listar los archivos de un directorio?»

  1. Antonio Rodríguez Santos

    despues de hacer un listado de un dircetorio como puedo buscar un fichero que tenga esta extension .qvw

    # La función http://FTP.cwd() es utilizada para cambiar de directorio o carpeta remota
    http://ftp.cwd(rutaServer)
    # Retorna información sobre los ficheros y directorios en la ubicación actual (listar directorio).
    print(ftp.retrlines(‘LIST’))
    apartir de aqui tengo el listado ¿como puedo buscar todos los dicheros .qvw?

    1. admin

      Hola Antonio, la funcion http://FTP.nlst(‘PATH’) devuelve los archivos como una lista, solo queda recorrerla y localizar el substring ‘.qvw’ con find().

      Un saludo.

Deja tu comentario