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

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.

 

¿Quieres ser expert@ en Python? Recibe trucos Python y las últimas novedades del blog

¡Eyyy! Esto también te puede interesar 👇

* Te informo de que los datos de carácter personal que proporciones al comentar serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es moderar los comentarios. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en Disqus (disqus.com), mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos enviando un email a juanjo@j2logo.com. Encontrarás más información en la POLÍTICA DE PRIVACIDAD.

Sobre j2logo

j2logo profile

Quiero ayudarte a que seas mejor programador/a, pero no uno cualquiera, sino uno de los top.

¿Quieres ser expert@ en Python? 🐍

❤️ He ayudado a miles de programadores/as como tú a ser mejores Pythonistas

📩 Recibe de vez en cuando trucos y scripts Python y las últimas novedades del blog

* Al enviar el formulario confirmas que aceptas la POLITICA DE PRIVACIDAD

¿Quieres ser expert@ en PYTHON?

j2logo-pythonistas

❤️ He ayudado a miles de programadores/as como tú

📩 Recibe trucos, scripts y las novedades del blog

¿Quieres dominar Python?

Python, Guía para ser un Pythonista

El curso con el que aprender el lenguaje desde cero. Con mi soporte y ayuda.

OFERTA BLACK FRIDAY

35% de descuento