Hace poco me encontré con un problema que seguramente te suene de algo. Pasé todas las fotos del móvil (en mi caso, un iPhone) al ordenador y tenía 5.623. Una locura, lo sé. Ahora estoy intentando entrar cada equis días en mi galería para eliminar las fotos que no sirven. Pero en fin, al caso… Os cuento como dividir una carpeta en varias subcarpetas con Python.
Tenía que ordenarlas/clasificarlas y cada vez que entraba en la carpeta que las contenía, la indexación de Windows se quedaba colgada y no me dejaba hacer nada. Pensé: tengo que dividir esto de alguna forma para que sea más cómodo y llevadero el purgado. Dicho y hecho.
Me puse a desarrollar un script en Python que hiciera el trabajo por mí. Solo tenía que indicarle en que ruta estaban todas las fotos, en que ruta quería que me creara las subcarpetas y cuantas fotos habría en cada una de ellas (en mi caso, he puesto que cada subcarpeta contenga 100 fotos/vídeos).
Os dejo por aquí el código empleado:
import os
from pathlib import Path
from os import walk
#Directorio donde están las fotos
dir = r"C:\Ruta\donde\estan\nuestras\fotos"
#Inicializo la variable que irá controlando el nº de carpeta a crear
contador_carpetas = 1
#Creamos la lista con los ficheros del directorio actual
res = []
for (dir, dir_names, file_names) in walk(dir):
res.extend(file_names)
#print(*res,sep='\n') #Esto es para pintar los ficheros en pantalla con un salto de línea, pura depuración
#Recogemos el nº de elementos de la lista para saber cuanto durará el for
num_ficheros = len(res)
#Directorio donde se crearán la nuevas carpetas
ruta = Path(r"C:\Ruta\nueva")
#Creamos un for que recorra los ficheros, cree las carpetas y mueva las fotos al nuevo destino
for i in range(num_ficheros):
if (num_ficheros-i) < 99:
print(num_ficheros-i)
exit()
#Creo una carpeta cuando el contador i sea múltiplo de 100, ya que quiero que en cada carpeta haya 100 fotos
if i%100 == 0:
nombreOK=str(contador_carpetas)
ruta_destino=os.path.join(ruta, nombreOK)
os.mkdir(ruta_destino)
contador_carpetas += 1
#Indico la ruta completa, con nombre incluído, de donde están las fotos y donde las quiero mover
fichero_origen = os.path.join(dir,res[i])
fichero_destino = os.path.join(ruta_destino,res[i])
os.rename(fichero_origen,fichero_destino)
Total, 39 líneas de nada que me ayudaron a hacer esta organización un poco más llevadera.
Mención especial a J.P. por ayudarme con el atasco del bucle (sí, todos necesitamos ayuda del abuelo cebolleta alguna vez).
Os dejo también por aquí el enlace al código en GitHub, por si queréis hacer un fork o qué sé yo.