HOWTO · Python
Python Comprobar si el directorio existe
Este tutorial muestra cómo comprobar si un directorio específico existe en Python
En esta página
Para comprobar si una ruta corresponde a un directorio, usa os.path.isdir() o, con un objeto Path, Path.is_dir(). Ambos distinguen los directorios de los archivos. Los ejemplos usan rutas temporales, así que no dependen de que ya haya una carpeta en el directorio de trabajo.
Comprobar si existe un directorio con os.path.isdir()
os.path.isdir(path) devuelve True cuando la ruta corresponde a un directorio existente y False cuando corresponde a un archivo o a una ruta que no existe. Acepta tanto cadenas de ruta como objetos similares a rutas. Úsala cuando quieras saber específicamente si el destino es un directorio.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import os
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as temp_dir:
root = Path(temp_dir)
directory = root / "reports"
directory.mkdir()
file_path = root / "notes.txt"
file_path.write_text("draft", encoding="utf-8")
print(os.path.isdir(directory))
print(os.path.exists(file_path))
print(os.path.isdir(file_path))
print((root / "archive").exists())
True
True
False
False
El espacio de trabajo temporal contiene un directorio, un archivo normal y una ruta que aún no se ha creado. La primera y la tercera comprobación muestran por qué os.path.isdir() resulta útil para distinguir un directorio de un archivo. Las demás llamadas usan las comprobaciones generales de existencia que se explican a continuación.
Comprobar si existe una ruta con os.path.exists()
os.path.exists(path) responde a una pregunta más general: ¿existe un archivo o un directorio en esta ruta? Devuelve True para cualquiera de los dos, así que por sí sola no permite confirmar que una ruta sea un directorio. Sigue los enlaces simbólicos; por eso, devuelve False si el enlace simbólico está roto. Por ejemplo, la ruta file_path del ejemplo pasa os.path.exists(), pero no pasa os.path.isdir().
Usa esta función cuando sirva cualquier tipo de elemento del sistema de archivos, por ejemplo, para comprobar si un archivo está disponible antes de leerlo. Si la operación posterior requiere un directorio, es preferible usar la comprobación específica para directorios. Además, otra operación puede modificar el sistema de archivos antes de que tu programa use la ruta; la comprobación no reserva la ruta ni garantiza que una operación posterior vaya a tener éxito.
Comprobar si existe un directorio con pathlib
pathlib representa las rutas como objetos y ofrece métodos para consultarlas. Llama a Path.is_dir() para responder a la misma pregunta específica sobre directorios que os.path.isdir(). Usa Path.exists() cuando cuente como existente tanto un archivo como un directorio. Al igual que os.path.exists(), Path.exists() sigue los enlaces simbólicos y devuelve False si el enlace está roto. En el ejemplo, (root / "archive").exists() aplica esta última forma a un objeto de ruta.
Cuando sea posible, elige un solo estilo de ruta para cada parte del código. pathlib resulta práctico si también necesitas unir componentes de ruta con /, crear carpetas o abrir archivos mediante métodos de Path. Las funciones de os.path siguen siendo útiles cuando una API existente o una base de código ya utiliza rutas como cadenas.
Elegir la comprobación adecuada para un directorio
Elige os.path.isdir() o Path.is_dir() si el siguiente paso requiere un directorio. Elige os.path.exists() o Path.exists() si basta con que exista cualquier elemento del sistema de archivos. Si necesitas distinguir un archivo de un directorio, compruébalo explícitamente con is_dir() y, cuando corresponda, con is_file(); no deduzcas el tipo a partir de la existencia general.
Estas funciones informan del estado del sistema de archivos que pueden observar en el momento de la comprobación. La ruta podría cambiar antes de una lectura, escritura o creación posterior. Gestiona también los errores de la operación que realmente necesitas realizar, sobre todo si los permisos o los cambios simultáneos pueden afectar al resultado.
Crear un directorio cuando no existe
Si un programa necesita un directorio antes de guardar un archivo, pathlib puede crearlo directamente:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as temp_dir:
output_dir = Path(temp_dir) / "reports"
output_dir.mkdir(parents=True, exist_ok=True)
Con parents=True también se crean los directorios superiores que falten. exist_ok=True permite que la llamada continúe si el directorio de destino ya existe. Si la ruta de destino corresponde a un archivo, la llamada sigue dando error; también pueden producirse errores de permisos u otros errores del sistema de archivos. Así, esta operación sirve para repetir un paso de preparación sin depender de una comprobación previa.
Si necesitas actuar de forma distinta según si el directorio ya existía, compruébalo con is_dir() antes de actuar, pero ten en cuenta que el sistema de archivos puede cambiar entre ambas operaciones. Para asegurarte simplemente de que el directorio esté disponible, mkdir(parents=True, exist_ok=True) es más breve y evita tratar una comprobación previa como una garantía.