Cómo operar con listados de archivos, directorios, filtrar y encontrar conjuntos de archivos
El árbol de archivos
Comprobar si es un archivo o un directorio
Para comprobar si una ruta almacenada en una variable es un archivo o por el contrario es un directorio podemos usar el método isfile del paquete os de Python.
import os file_path = '/tmp/fotogragia.jpg' if os.path.isfile(file_path): print(u"Es un archivo!") else: print("Es un directorio!")
También podemos hacer uso directo de os.path.isdir para detectar si es un directorio.
Obtener los archivos y sub-directorios de un directorio
Si tenemos una variable con un directorio del sistema, podemos obtener una lista con todos los archivos y sub-directorios que incluye como en el siguiente ejemplo:
import os nombre_carpeta = '/home/urodoz/ftp_data/' lista_contenido = os.listdir(nombre_carpeta) print(lista_contenido) # Ejemplo de salida: ['subcarpeta1', 'subcarpeta2', 'archivo1.txt', 'archivo2.jpg']
Filtrar archivos de un directorio
Si queremos obtener un subconjunto de los archivos de un directorio que cumplan cierto patrón podemos usar la librería fnmatch.
En el siguiente ejemplo obtener todos los archivos txt de un directorio:
import fnmatch import os archivos_finales = [] for file in os.listdir("/tmp"): if fnmatch.fnmatch(file, "*.txt"): archivos_finales.append(file) # Tenemos todos los archivos filtrados en la lista archivos_finales
Obtener archivos de forma recursiva
Si necesitamos obtener todos los archivos que cumplan cierto patrón de forma recursiva en un conjunto de carpetas y subcarpetas. Podemos usar os.walk para recorrer todas los subdirectorios de un directorio dado.
En el siguiente ejemplo obtenemos todos los archivos JPG de un conjunto de subdirectorios:0
import os import fnmatch # En la variable archivos_finales almacenaremos los archivos JPG archivos_finales = [] for root, dirnames, filenames in os.walk(source): for filename in filenames: if fnmatch.fnmatch(file, "*.jpg"): archivos_finales.append(file)