Memorias de un Técnico Ligero

Ver más publicaciones del año 2026

Moviendo archivos con python - Versión 2 - global

Bien, tenemos el script de la publicación anterior, bastante rústico pero que sirvió para mover de a un mes, todo muy lindo, todo hermoso. Pero ahora tenemos más inquietudes: queremos poner este script en medio de un caos, fotos de cualquier año, mes y lo que venga. Y para eso necesitamos más automatización, o sea: directorio por año y luego subdirectorios separados por meses. Vamos a ver:

#Moviendo archivos por año y meses
#por HI7903b
import os
import shutil
from datetime import datetime


print("=== Ordena los archivos por fecha ===")
print("Arranco a rastrear qué anduvo pasando por acá...\n")

el_directorio =os.getcwd()

que_archivo = ".jpg" 

lista_ordenada = []

for archivo in os.listdir (el_directorio):      
    if archivo.endswith(que_archivo):
        encontrado = os.path.join (el_directorio, archivo)
        fecha_mod = os.path.getmtime(encontrado)
        fechita = datetime.fromtimestamp(fecha_mod)
        print (f"Mes: {fechita.month}\nDía: {fechita.day}\nAño: {fechita.year}\n")
        lista_ordenada.append((fechita.year, fechita.month, encontrado))

if len(lista_ordenada) == 0:
       print (f"No hay archivos en el directorio con la extensión {que_archivo}")
       exit()
else:
    lista_ordenada.sort()

print ("Se encontraron los siguientes archivos:")
movidos = 0

for linea in lista_ordenada:
    anio = linea[0]
    mes = linea[1]
    origen = linea[2]
    destino = os.path.join(
        el_directorio,
        str(anio),
        str(mes).zfill(2)
    )
    os.makedirs(destino, exist_ok=True)
    shutil.move(origen, destino)
    print(f"Muevo {origen} a {destino}")
    movidos += 1

print (f"Se han movido al directorio {mes}: {movidos} archivos.")

Confieso que la última parte me la sugirió el buen ChatGPT (me resisto aún a que me haga el código de cero, quiero programar pero tampoco soy necio, esta parte es una obra de arte, yo soy más salvaje para programar):

for linea in lista_ordenada:
    anio = linea[0]
    mes = linea[1]
    origen = linea[2]
    destino = os.path.join(
        el_directorio,
        str(anio),
        str(mes).zfill(2)
    )
    os.makedirs(destino, exist_ok=True)
    shutil.move(origen, destino)
    print(f"Muevo {origen} a {destino}")
    movidos += 1

Me enseñó a manejar fechas con el datetime (antes lo hacía a pura rusticidad separando el mes con fecha[5:7]. Me enseñó además a manejar las listas por tuplas, que si bien lo hacía en django, no tenía idea después de verlo así lo fácil que es manejar más datos (no sé si mencioné que amo las listas).

Arriba


Escrito por: HI7903B , el día: