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")