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

Cómo crear directorios en Python (y de forma recursiva)
Share on facebook
Share on twitter
Share on linkedin

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.

 

¿Me ayudas a compartir el post? 🤗🤟🏻

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn

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

Últimos posts

¿Quieres ser un auténtico Pythonista? 🐍

Recibe de vez en cuando trucos, scripts y tutoriales Python en español para dominar el lenguaje. No es SPAM. Date de baja cuando quieras.

* Te informo de que los datos de carácter personal que proporciones serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es el envío de trucos, scripts, mis publicaciones así como correos comerciales. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en mi plataforma de email marketing MailRelay que garantiza las medidas de seguridad encaminadas a proteger la privacidad. 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 POLITICA DE PRIVACIDAD

Tutoriales Python en español

👉🏻 🐍 Tutoriales Python. ¿Por qué Python?