Pablo Delgado Flores

Dividir una carpeta en varias subcarpetas con Python

Nivel del post no aplicainicialintermedioavanzado
Tiempo de lectura aproximado 2min

Os dejo un script en Python para dividir el contenido de una carpeta en varias subcarpetas.

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.

¡Extra, extra!

Suscríbete a mi newsletter para no perderte nada de mi nuevo contenido sobre bases de datos, administración de sistemas, programación

pablo_delgado_avatar

Pablo Delgado Flores

Auténtico apasionado por la informática, especialmente por las bases de datos, administración de sistemas y desarrollo web.

Empecé a trabajar como técnico informático mucho antes de obtener una titulación oficial (sysadmin). Actualmente trabajo como DBA Oracle, aunque manejo otros motores como MySQL/MariaDB, PostgreSQL y Amazon Redshift.

También escribo sobre Bases de Datos en Como ser DBA, la terminal de Linux/Unix en #Sudosu y  desarrollo web con Woocoomerce/WordPress en DesarrolloWoo.

Subscribirse
Notificar de
guest
0 Comentarios
Comentarios en línea
Ver todos los comentarios
Ir arriba