in

excepción: ¿cómo puedo crear de forma segura un directorio anidado en Python?

apple touch icon@2

Python 3.5+:

import pathlib
pathlib.Path('/my/directory').mkdir(parents=True, exist_ok=True) 

pathlib.Path.mkdir como se usó arriba crea recursivamente el directorio y no genera una excepción si el directorio ya existe. Si no necesita o no desea que se creen los padres, omita el parents argumento.

Python 3.2+:

Utilizando pathlib:

Si puede, instale el actual pathlib backport nombrado pathlib2. No instale el puerto posterior no mantenido más antiguo llamado pathlib. A continuación, consulte la sección de Python 3.5+ anterior y utilícela de la misma manera.

Si usa Python 3.4, aunque viene con pathlib, falta lo útil exist_ok opción. El backport está destinado a ofrecer una implementación más nueva y superior de mkdir que incluye esta opción que falta.

Utilizando os:

import os
os.makedirs(path, exist_ok=True)

os.makedirs como se usó arriba crea recursivamente el directorio y no genera una excepción si el directorio ya existe. Tiene el opcional exist_ok argumento solo si se usa Python 3.2+, con un valor predeterminado de False. Este argumento no existe en Python 2.x hasta 2.7. Como tal, no es necesario el manejo manual de excepciones como con Python 2.7.

Python 2.7+:

Utilizando pathlib:

Si puede, instale el actual pathlib backport nombrado pathlib2. No instale el puerto posterior no mantenido más antiguo llamado pathlib. A continuación, consulte la sección Python 3.5+ anterior y utilícela de la misma manera.

Utilizando os:

import os
try: 
    os.makedirs(path)
except OSError:
    if not os.path.isdir(path):
        raise

Si bien una solución ingenua puede usarse primero os.path.isdir seguido por os.makedirs, la solución anterior invierte el orden de las dos operaciones. Al hacerlo, evita una condición de carrera común que tiene que ver con un intento duplicado de crear el directorio y también elimina la ambigüedad de los archivos de los directorios.

Tenga en cuenta que capturar la excepción y usar errno es de utilidad limitada porque OSError: [Errno 17] File exists, es decir errno.EEXIST, se genera tanto para archivos como para directorios. Es más confiable simplemente verificar si el directorio existe.

Alternativa:

mkpath crea el directorio anidado y no hace nada si el directorio ya existe. Esto funciona tanto en Python 2 como en 3.

import distutils.dir_util
distutils.dir_util.mkpath(path)

Por Error 10948, una limitación severa de esta alternativa es que funciona solo una vez por proceso de Python para una ruta determinada. En otras palabras, si lo usa para crear un directorio, elimine el directorio desde dentro o fuera de Python, luego use mkpath de nuevo para volver a crear el mismo directorio, mkpath simplemente usará silenciosamente su información almacenada en caché no válida de haber creado previamente el directorio, y en realidad no volverá a crear el directorio. A diferencia de, os.makedirs no depende de tal caché. Esta limitación puede estar bien para algunas aplicaciones.


Con respecto a la guía modo, consulte la documentación si le interesa.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

acid properties in dbms

Propiedades ACID en DBMS – javatpoint

dbms functional dependency

Dependencia funcional DBMS – javatpoint