Gestión de Archivos (OS, Shutil)

 Python ofrece dos módulos clave:

  • os → trabajar con rutas, carpetas, archivos, permisos

  • shutil → copiar, mover, borrar y operaciones de alto nivel

Vamos paso a paso.

1. Módulo os

Listar archivos y carpetas

import os

print(os.listdir("."))   # Lista el directorio actual

Crear carpetas

os.mkdir("nueva_carpeta")

Crear carpetas anidadas

os.makedirs("carpeta1/carpeta2/carpeta3")

Comprobar si un archivo existe

if os.path.exists("archivo.txt"):
    print("Existe")

Renombrar archivos

os.rename("viejo.txt", "nuevo.txt")

Eliminar archivos

os.remove("archivo.txt")

Eliminar carpetas vacías

os.rmdir("carpeta_vacia")

2. Módulo shutil

Copiar archivos

import shutil

shutil.copy("origen.txt", "copia.txt")

Copiar carpetas completas

shutil.copytree("carpeta_original", "carpeta_copia")

Mover archivos o carpetas

shutil.move("archivo.txt", "nueva_ruta/archivo.txt")

Eliminar carpetas con contenido

shutil.rmtree("carpeta_con_archivos")

3. Trabajar con rutas (os.path)

Unir rutas correctamente

ruta = os.path.join("carpeta", "archivo.txt")

Obtener nombre del archivo

os.path.basename("/ruta/completa/archivo.txt")

Obtener carpeta contenedora

os.path.dirname("/ruta/completa/archivo.txt")

Comprobar si es archivo o carpeta

os.path.isfile("archivo.txt")
os.path.isdir("carpeta")

ACTIVIDAD PRÁCTICA: “Organizador automático de archivos”

Objetivo: que tus alumnos creen un script que organice archivos por tipo, como hacen los programas de limpieza de descargas.

Enunciado

Crea un programa que:

  1. Pida al usuario una carpeta origen.

  2. Cree dentro de ella subcarpetas según tipo de archivo:

    • imagenes → .jpg, .png, .gif

    • documentos → .pdf, .docx, .txt

    • videos → .mp4, .avi

    • otros → cualquier otro tipo

  3. Mueva cada archivo a su carpeta correspondiente.

  4. Muestre un resumen final con cuántos archivos movió.

Pistas

  • Usa os.listdir() para obtener los archivos.

  • Usa os.path.splitext() para obtener la extensión.

  • Usa shutil.move() para moverlos.

  • Crea carpetas solo si no existen.

Solución propuesta

import os
import shutil

def organizar_carpeta(ruta):
    # Diccionario de tipos
    tipos = {
        "imagenes": [".jpg", ".jpeg", ".png", ".gif"],
        "documentos": [".pdf", ".docx", ".txt"],
        "videos": [".mp4", ".avi"],
    }

    # Crear carpetas si no existen
    for carpeta in ["imagenes", "documentos", "videos", "otros"]:
        os.makedirs(os.path.join(ruta, carpeta), exist_ok=True)

    contador = 0

    # Recorrer archivos
    for archivo in os.listdir(ruta):
        ruta_archivo = os.path.join(ruta, archivo)

        # Saltar carpetas
        if os.path.isdir(ruta_archivo):
            continue

        _, extension = os.path.splitext(archivo)
        extension = extension.lower()

        # Determinar destino
        destino = "otros"
        for carpeta, extensiones in tipos.items():
            if extension in extensiones:
                destino = carpeta
                break

        # Mover archivo
        shutil.move(ruta_archivo, os.path.join(ruta, destino, archivo))
        contador += 1

    print(f"Organización completada. Archivos movidos: {contador}")


# Programa principal
ruta = input("Introduce la ruta de la carpeta a organizar: ")
organizar_carpeta(ruta)

Ejemplo de salida

Introduce la ruta de la carpeta a organizar: C:\Users\Alumno\Downloads
Organización completada. Archivos movidos: 27