En el módulo os en Python, ¿hay alguna manera de encontrar si existe un directorio, algo como:
>>> os.direxists(os.path.join(os.getcwd()), 'new_folder')) # in pseudocode True/FalseSí, use os.path.exists() .
Está buscando os.path.isdir u os.path.exists si no le importa si es un archivo o un directorio:
>>> import os >>> os.path.isdir('new_folder') True >>> os.path.exists(os.path.join(os.getcwd(), 'new_folder', 'file.txt')) False Alternativamente, puede usar pathlib :
>>> from pathlib import Path >>> Path('new_folder').is_dir() True >>> (Path.cwd() / 'new_folder' / 'file.txt').exists() FalseComo en:
In [3]: os.path.exists('/d/temp') Out[3]: True Probablemente agregue un os.path.isdir(...) para estar seguro.
¡Tan cerca! os.path.isdir devuelve True si pasa el nombre de un directorio que existe actualmente. Si no existe o no es un directorio, devuelve False .
Sí, use os.path.isdir (ruta)
os le proporciona muchas de estas capacidades:
import os os.path.isdir(dir_in) #True/False: check if this is a directory os.listdir(dir_in) #gets you a list of all files and directories under dir_inlistdir lanzará una excepción si la ruta de entrada no es válida.
Solo para proporcionar la versión os.stat (python 2):
import os, stat, errno def CheckIsDir(directory): try: return stat.S_ISDIR(os.stat(directory).st_mode) except OSError, e: if e.errno == errno.ENOENT: return False raisePython 3.4 introdujo el módulo pathlib en la biblioteca estándar, que proporciona un enfoque orientado a objetos para manejar las rutas del sistema de archivos. Los is_dir() y exist( exists() de un objeto Path se pueden usar para responder la pregunta:
In [1]: from pathlib import Path In [2]: p = Path('/usr') In [3]: p.exists() Out[3]: True In [4]: p.is_dir() Out[4]: True Las rutas (y las cadenas) se pueden unir con el operador / :
In [5]: q = p / 'bin' / 'vim' In [6]: q Out[6]: PosixPath('/usr/bin/vim') In [7]: q.exists() Out[7]: True In [8]: q.is_dir() Out[8]: FalsePathlib también está disponible en Python 2.7 a través del módulo pathlib2 en PyPi.
#You can also check it get help for you if not os.path.isdir('mydir'): print('new directry has been created') os.system('mkdir mydir')Podemos verificar con 2 funciones integradas
os.path.isdir("directory")Dará booleano verdadero el directorio especificado está disponible.
os.path.exists("directoryorfile")Dará boolead verdadero si el directorio o archivo especificado está disponible.
Para verificar si la ruta es un directorio;
os.path.isdir("directorypath")
dará verdadero booleano si la ruta es directorio
Hay un módulo Unipath conveniente.
>>> from unipath import Path >>> >>> Path('/var/log').exists() True >>> Path('/var/log').isdir() TrueOtras cosas relacionadas que podrías necesitar:
>>> Path('/var/log/system.log').parent Path('/var/log') >>> Path('/var/log/system.log').ancestor(2) Path('/var') >>> Path('/var/log/system.log').listdir() [Path('/var/foo'), Path('/var/bar')] >>> (Path('/var/log') + '/system.log').isfile() TruePuedes instalarlo usando pip:
$ pip3 install unipath Es similar al pathlib . La diferencia es que trata cada ruta como una cadena ( Path es una subclase de str ), por lo que si alguna función espera una cadena, puede pasarla fácilmente como un objeto Path sin necesidad de convertirlo en una cadena.
Por ejemplo, esto funciona muy bien con Django y settings.py :
# settings.py BASE_DIR = Path(__file__).ancestor(2) STATIC_ROOT = BASE_DIR + '/tmp/static'Fuente , si todavía está allí en SO.
================================================== ===================
En Python ≥ 3.5, use pathlib.Path.mkdir :
from pathlib import Path Path("/my/directory").mkdir(parents=True, exist_ok=True)Para versiones anteriores de Python, veo dos respuestas con buenas cualidades, cada una con un pequeño defecto, así que daré mi opinión:
Pruebe os.path.exists y considere os.makedirs para la creación.
import os if not os.path.exists(directory): os.makedirs(directory) Como se señaló en los comentarios y en otros lugares, hay una condición de carrera: si el directorio se crea entre las llamadas os.path.exists y os.makedirs , os.makedirs fallará con un OSError . Desafortunadamente, la captura general de OSError y la continuación no son infalibles, ya que ignorarán una falla al crear el directorio debido a otros factores, como permisos insuficientes, disco lleno, etc.
Una opción sería atrapar el OSError y examinar el código de error incrustado (consulte ¿Existe una forma multiplataforma de obtener información del OSError de Python ):
import os, errno try: os.makedirs(directory) except OSError as e: if e.errno != errno.EEXIST: raise Alternativamente, podría haber un segundo os.path.exists , pero supongamos que otro creó el directorio después de la primera verificación y luego lo eliminó antes de la segunda; aún podríamos ser engañados.
Dependiendo de la aplicación, el peligro de las operaciones simultáneas puede ser mayor o menor que el peligro que representan otros factores, como los permisos de archivo. El desarrollador tendría que saber más sobre la aplicación en particular que se está desarrollando y su entorno esperado antes de elegir una implementación.
Las versiones modernas de Python mejoran bastante este código, tanto al exponer FileExistsError (en 3.3+)...
try: os.makedirs("path/to/directory") except FileExistsError: # directory already exists pass ...y al permitir un argumento de palabra clave para os.makedirs llamado exist_ok (en 3.2+).
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.Dos cosas
import os dirpath = "<dirpath>" # Replace the "<dirpath>" with actual directory path. if os.path.exists(dirpath): print("Directory exist") else: #this is optional if you want to create a directory if doesn't exist. os.mkdir(dirpath): print("Directory created")El siguiente código verifica que el directorio al que se hace referencia en su código exista o no, si no existe en su lugar de trabajo, entonces, crea uno:
import os if not os.path.isdir("directory_name"): os.mkdir("directory_name")