Saltar al contenido

python

Cómo crear directorios en Python (y especificando la ruta completa)

En este tutorial aprenderás distintas alternativas para crear directorios en Python, incluso las posibilidades para crear carpetas de forma recursiva.

Cómo crear directorios en Python (y de forma recursiva)

En muchas aplicaciones es muy común que tengas que crear un directorio para almacenar un conjunto de archivos. De hecho, yo es algo con lo que me encuentro muy a menudo. ¿Te ha ocurrido a ti? Estoy casi seguro de que sí. Por eso, en este post de 🐍 Desayunando con Python vamos a ver cómo crear directorios de varias formas, incluso creando las carpetas intermedias de una ruta completa de forma recursiva.

Crear directorios en Python con mkdir()

La forma más sencilla en Python de crear una carpeta es utilizando la función mkdir() del módulo os:

import os
    
os.mkdir('dir1')

El código anterior creará un directorio llamado dir1 en la misma ruta en que se encuentre nuestro script Python que hayamos ejecutado.

❗️ ¿Qué ocurre si intentamos crear un directorio que ya existe? Básicamente, el intérprete lanzará un error:

FileExistsError: [Errno 17] File exists: 'dir1'

¿Cómo podemos evitarlo? Manejando el error correspondiente. Esto lo deberíamos hacer prácticamente siempre, especialmente en aquellas aplicaciones donde se pueda dar una condición de carrera, en la que varios hilos/procesos traten de crear un mismo directorio de forma concurrente.

Por tanto, el código apropiado para crear un directorio en Python con mkdir() sería como el que sigue:

import os
import errno

try:
    os.mkdir('dir1')
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

Imaginemos ahora que necesitamos crear un directorio dir3 pero este debe encontrarse en la siguiente ruta: dir1/dir2/dir3, sin embargo, dir1 y dir2 no existen:

>>> import os
>>> os.mkdir('dir1/dir2/dir3')
Traceback (most recent call last):
  File "directorios.py", line 124, in <module>
    os.mkdir('dir1/dir2/dir3')
FileNotFoundError: [Errno 2] No such file or directory: 'dir1/dir2/dir3'


Como vemos, el intérprete lanza un error porque la carpeta dir2 no existe. ¿Solución? Sí, te la muestro en la siguiente sección 😊

Crear directorios en Python de forma recursiva

Además de la función mkdir(), Python ofrece otros métodos para crear directorios, incluso aunque falte alguno en la ruta especificada.

Crear directorios de forma recursiva con makedirs()

makedirs() es la función que nos permite crear directorios de forma recursiva en Python. Es como mkdir(), pero crea todos los directorios intermedios hasta el directorio hoja si no existen.

❗️ Si la carpeta final ya existe, lanza un error.

import os

os.makedirs('dir1/dir2/dir3')

En esta ocasión toda la ruta de carpetas se creará sin problemas.

Si volvemos a ejecutar el código anterior, comprobaremos que el intérprete nos muestra el error correspondiente. No obstante, lo podemos solventar del mismo modo que en la sección anterior. Pero a partir de la versión 3.2 de Python, a la función makedirs() se le puede pasar el parámetro exist_ok para que no se produzca ningún error en caso de que la carpeta ya exista:

import os

os.makedirs('dir1/dir2/dir3', exist_ok=True)

Crear directorios de forma recursiva con el módulo pathlib

La versión 3.4 de Python añadió el módulo pathlib. Gracias a este módulo, podemos crear directorios de forma recursiva de manera similar a como lo hacemos con makedirs():

from pathlib import Path

path = Path('dir1/dir2/dir3/dir4')
path.mkdir(parents=True)

❗️ Ten en cuenta que hay que indicar el parámetro parents a True.

Y a partir de la versión 3.5, para que no se lance ningún error en caso de que la carpeta hoja exista, también podemos indicar el parámetro exist_ok=True.

Conclusión

Como ves, Python ofrece distintas alternativas para crear directorios. Si no necesitas crear ninguna ruta intermedia, la opción más eficiente es usar la función mkdir() del módulo os (manejando el error correspondiente por si el directorio ya existe o se pueden dar condiciones de carrera). En caso de que tengas que crear una ruta de directorios de manera recursiva, puedes usar la función makedirs(). Y si trabajas con una versión de Python superior o igual a la 3.4, tienes la posibilidad de usar el módulo pathlib.

 

Newsletter EstrategIA

Programar con IA sin perder el control

Si te ha interesado este artículo, esto también te va a interesar. Cada dos martes te cuento qué funciona y qué no al construir software con agentes de IA, con ejemplos reales de mi software factory y los números de mis proyectos, sin maquillar.

9.277 desarrolladores y profesionales ya la leen martes quincenales

EstrategIA Próximo número · martes

Lo que recibes

  1. Qué funciona (y qué no) programando con agentes de IA
  2. Casos reales de MaIA y DGC: decisiones, errores y resultados
  3. Los números de mis proyectos, sin maquillar
  4. Una idea que puedes aplicar esa misma semana

Sin spam. Te das de baja con un clic.

j2logo

Sigue leyendo

Listar directorio en Python
python

Listar directorio en Python. Listar ficheros de un directorio

requests - Hacer peticiones http en Python
python

Python requests. La librería para hacer peticiones http en Python

Web scraping con Python. Guía de inicio a BeautifulSoup
python

Web scraping con Python. Extraer datos de una web. Guía de inicio de Beautiful Soup

Tutorial de SQLAlchemy
python

SQLAlchemy. Tutorial de Python SQLAlchemy. Guía de inicio