Cómo crear y borrar carpetas en Python con os y pathlib

1. Método básico para crear carpetas en Python

En Python hay una manera sencilla de crear carpetas utilizando la biblioteca estándar. El módulo que se usa principalmente es os. En esta sección explicamos en detalle cómo crear carpetas con el módulo os.

Cómo crear carpetas en Python: módulo os

Con el módulo os puedes crear carpetas desde el programa. Esto es útil, por ejemplo, para organizar datos o para crear directorios donde guardar registros. El método básico para crear una carpeta es el siguiente:
import os

# Especifica la ruta de la carpeta a crear
path = 'example_folder'

# Crea la carpeta
os.mkdir(path)
En este código, se crea la carpeta nueva «example_folder» usando la función os.mkdir(). Sin embargo, si la carpeta ya existe, esta función genera FileExistsError.

Crear carpetas de varios niveles: os.makedirs()

Si quieres crear no solo una carpeta, sino directorios de varios niveles de una vez, usa la función os.makedirs().
import os

# Especifica una ruta de carpetas de varios niveles
path = 'example_folder/subfolder'

# Crea la carpeta incluso si el directorio padre no existe
os.makedirs(path)
Así, con os.makedirs() es posible crear al mismo tiempo los directorios padre que no existan en la ruta indicada. Esto permite crear toda la estructura de carpetas de una sola vez, lo cual es muy práctico.

Manejo de errores: uso de exist_ok=True

Si quieres continuar sin provocar un error cuando la carpeta ya exista, usa la opción exist_ok=True. Configurándola como en el siguiente ejemplo, no se producirá un error aunque la carpeta exista.
import os

path = 'example_folder/subfolder'

# Ignora el error incluso si la carpeta ya existe
os.makedirs(path, exist_ok=True)
De este modo, aunque el programa intente crear la misma carpeta cada vez que se ejecute, no se producirán errores, lo que te permite escribir un código más robusto.

2. Creación de carpetas con el módulo Pathlib

Desde Python 3.4, el módulo pathlib forma parte de la biblioteca estándar. Este módulo permite manipular rutas de forma orientada a objetos y crear carpetas de manera intuitiva. Aquí explicamos cómo crear carpetas con el módulo pathlib.

Cómo usar el módulo Pathlib

Con pathlib.Path() es posible crear directorios. Igual que con el módulo os, al especificar exist_ok=True puede evitarse un error incluso si la carpeta ya existe.
from pathlib import Path

# Especificar la ruta de la carpeta que se desea crear
path = Path('example_folder/subfolder')

# Crear la carpeta
path.mkdir(parents=True, exist_ok=True)
En este código, al especificar parents=True, se crean también los directorios padre aunque no existan. Con ello se consigue un comportamiento similar a os.makedirs().

Ventajas del módulo Pathlib

Una de las principales características del módulo pathlib es que permite operaciones orientadas a objetos. Al usar objetos Path, además de crear carpetas, es posible unir rutas y manipular archivos de forma intuitiva. Esto mejora la legibilidad y el mantenimiento del código.

3. Manejo de errores en la creación de carpetas

Al crear carpetas, pueden ocurrir diversos errores. Por ejemplo, cuando no se tienen permisos suficientes o cuando la ruta especificada no es válida. En esta sección se explica cómo implementar el manejo de errores.

Manejo de errores de permisos y rutas no válidas

Entre los errores comunes que pueden ocurrir al crear carpetas con os.makedirs() y pathlib.Path().mkdir() se encuentran PermissionError y FileNotFoundError. Al manejar estos errores de forma adecuada, se pueden crear programas más robustos. A continuación se muestra un ejemplo de manejo de errores.
import os

path = 'example_folder/subfolder'

try:
    os.makedirs(path, exist_ok=True)
    print(f'Se ha creado la carpeta "{path}".')
except PermissionError:
    print('No hay permisos para crear la carpeta.')
except FileNotFoundError:
    print('La ruta especificada no es válida.')
except Exception as e:
    print(f'Se ha producido un error inesperado: {e}')
En este código se muestran las formas de tratar cada error común y también se contemplan errores inesperados. De este modo, los errores se gestionan correctamente sin que el programa se interrumpa.

Manejo de errores más avanzado

En situaciones en las que la creación de carpetas puede fallar, también debería considerarse registrar el error en los registros y notificar al usuario. En especial, en aplicaciones de gran tamaño, el manejo de errores influye en gran medida en la experiencia de usuario, por lo que se requiere una respuesta adecuada.

4. Cómo eliminar carpetas

Además de crear carpetas, a menudo también es necesario eliminar las que ya no se necesitan. En Python, se pueden eliminar carpetas utilizando los módulos os y shutil de la biblioteca estándar. Aquí explicamos los métodos específicos.

Eliminación de carpetas con os.rmdir()

El módulo os proporciona una función llamada rmdir() con la que se pueden eliminar carpetas. Sin embargo, esta función tiene la restricción de que la carpeta a eliminar debe estar vacía.
import os

# Especificar la ruta de la carpeta a eliminar
path = 'example_folder/subfolder'

# Eliminar la carpeta
os.rmdir(path)
Este código solo funciona correctamente si la carpeta indicada está vacía. Si hay archivos u otros directorios dentro de la carpeta, se producirá un OSError.

Eliminación recursiva de carpetas con shutil.rmtree()

Si hay archivos u otras subcarpetas dentro de la carpeta, con la función rmtree() del módulo shutil se puede eliminar de forma recursiva la carpeta y su contenido.
import shutil

# Especificar la ruta de la carpeta a eliminar
path = 'example_folder/subfolder'

# Eliminar la carpeta y su contenido
shutil.rmtree(path)
Este método permite eliminar carpetas sin problemas incluso cuando el directorio no está vacío, por lo que resulta útil al borrar un árbol de directorios completo. No obstante, los archivos y carpetas eliminados no se pueden recuperar, así que debe manejarse con cuidado.

Manejo de errores

El manejo de errores también es importante al eliminar carpetas. Por ejemplo, si no se tienen permisos sobre la carpeta a eliminar o si la ruta especificada no es válida, se producirá un error. A continuación se muestra un ejemplo de código con manejo de errores.
import shutil

path = 'example_folder/subfolder'

try:
    shutil.rmtree(path)
    print(f'La carpeta "{path}" se ha eliminado.')
except PermissionError:
    print('No hay permisos para eliminar la carpeta.')
except FileNotFoundError:
    print('No se encontró la carpeta especificada.')
except Exception as e:
    print(f'Se produjo un error inesperado: {e}')
En este código se manejan los errores que pueden ocurrir durante la eliminación y también se responde de forma flexible a errores inesperados.

5. Casos de uso reales

Aquí combinamos la creación y la eliminación de carpetas para presentar casos de uso útiles en proyectos reales y en el procesamiento de datos. En particular, se contemplan casos como organizar los datos en carpetas por año y por mes.

Creación de carpetas por año y mes

Por ejemplo, si desea organizar los datos por año o por mes, puede crear un script que cree automáticamente las carpetas.
import os
from datetime import datetime

# Obtener el año y el mes actuales
current_year = datetime.now().year
current_month = datetime.now().month

# Definir la ruta de la carpeta
folder_path = f'data/{current_year}/{current_month}'

# Crear la carpeta
os.makedirs(folder_path, exist_ok=True)
print(f'Se ha creado la carpeta "{folder_path}".')
Este script crea automáticamente carpetas basadas en el año y el mes actuales y ayuda a organizar los datos de forma eficiente.

Eliminación masiva de carpetas

También es posible, usando Python, procesar de forma eficiente la eliminación masiva de carpetas innecesarias basándose en condiciones específicas. Por ejemplo, se puede crear un script que elimine carpetas de datos antiguas que hayan superado un determinado período.
import shutil
import os
from datetime import datetime, timedelta

# Obtener la fecha de hace 30 días
threshold_date = datetime.now() - timedelta(days=30)

# Ruta base de las carpetas a eliminar
base_path = 'data/'

# Comprobar las carpetas y eliminar las antiguas
for folder_name in os.listdir(base_path):
    folder_path = os.path.join(base_path, folder_name)
    if os.path.isdir(folder_path):
        folder_date = datetime.strptime(folder_name, '%Y-%m-%d')
        if folder_date < threshold_date:
            shutil.rmtree(folder_path)
            print(f'Se ha eliminado la carpeta antigua "{folder_path}".')
En estos casos de uso, al automatizar con un programa la gestión y organización de carpetas, es posible omitir las operaciones manuales.

6. Resumen

En este artículo explicamos cómo crear y eliminar carpetas con Python. Desde las operaciones básicas con los módulos os y pathlib hasta el manejo de errores al crear carpetas y casos de uso reales, presentamos un amplio abanico de temas. Al aplicar estos conocimientos, podrás crear programas que gestionen datos y archivos de manera eficiente。 Como siguiente paso, además de la creación y eliminación de carpetas, sería recomendable aprender también técnicas de gestión de datos más avanzadas, como operaciones con archivos y compresión。
侍エンジニア塾