Selección aleatoria y renombrado de imágenes en carpetas para generación de datos

Este primer script identifica subdirectorios que contianen archivos de imagen dentro de un directroio raíz y copia una cantidad especificada de imágenes aleatorias de cada uno a una ubicación destino.


import os
import shutil
import random

def localizar_carpetas_con_imágenes(ruta_raíz):
    carpetas_identificadas = []
    for directorio_actual, subdirectorios, archivos in os.walk(ruta_raíz):
        if any(archivo.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')) for archivo in archivos):
            carpetas_identificadas.append(directorio_actual)
    return carpetas_identificadas

def transferir_imágenes_azar(origen, destino, límite):
    listado_imágenes = [f for f in os.listdir(origen) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))]
    if not listado_imágenes or límite <= 0:
        return
    muestra = random.sample(listado_imágenes, min(límite, len(listado_imágenes)))
    for elemento in muestra:
        shutil.copy(os.path.join(origen, elemento), os.path.join(destino, elemento))

def ejecutar_proceso():
    ruta_base = input("Introduzca la ruta del directorio raíz: ")
    cantidad = int(input("Especifique el número de imágenes por carpeta: "))
    carpeta_salida = input("Indique la ruta de la carpeta de destino: ")

    if not os.path.exists(carpeta_salida):
        os.makedirs(carpeta_salida)

    directorios = localizar_carpetas_con_imágenes(ruta_base)
    for dir in directorios:
        transferir_imágenes_azar(dir, carpeta_salida, cantidad)

    print("Operación de selección y copia finalizada.")

if __name__ == "__main__":
    ejecutar_proceso()

El siguiente código procesa nombres de archivo en un directorio, eliminando la porción anterior al primer signo de coma, con manejo de colisiones de nombres.


import os

def estandarizar_nombres(ruta_directorio):
    if not os.path.isdir(ruta_directorio):
        print("Ruta no válida. Confirme el directorio.")
        return

    try:
        os.chdir(ruta_directorio)
        for archivo in os.listdir():
            if ',' in archivo:
                segmentos = archivo.split(',', 1)
                nombre_limpio = segmentos[1].strip() if len(segmentos) > 1 else archivo
                base_original = nombre_limpio
                iterador = 1
                while os.path.exists(nombre_limpio):
                    nombre_base, extensión = os.path.splitext(base_original)
                    nombre_limpio = f"{nombre_base}_{iterador}{extensión}"
                    iterador += 1
                os.rename(archivo, nombre_limpio)
                print(f"Archivo renombrado: '{archivo}' -> '{nombre_limpio}'")
            else:
                print(f"'{archivo}' no requirió cambios")
    except Exception as error:
        print(f"Fallo durante el procesamiento: {error}")

if __name__ == "__main__":
    while True:
        ruta = input("Ingrese directorio a procesar ('fin' para salir): ")
        if ruta.lower() == 'fin':
            break
        estandarizar_nombres(ruta)
        print("Renombrado de archivos concluido.\n")

Etiquetas: Python manipulación del sistema de archivos procesamiento de imágenes scripts de automatización módulo os

Publicado el 6-3 00:15