not functions python system mkdir

not - python os functions



os.mkdir(ruta) devuelve OSError cuando el directorio no existe (8)

En Python 3.2 y superior, puedes usar:

os.makedirs(path, exist_ok=True)

para evitar obtener una excepción si el directorio ya existe. Esto aún generará una excepción si la path existe y no es un directorio.

Estoy llamando a os.mkdir para crear una carpeta con un determinado conjunto de datos generados. Sin embargo, a pesar de que la ruta que especifico no se ha creado, el os.mkdir (ruta) genera un error OSError que la ruta ya existe.

Por ejemplo, yo llamo:

os.mkdir(test)

Esta llamada da como resultado OSError: [Errno 17] File exists: ''test'' aunque no tengo un directorio de prueba o un archivo llamado prueba en ningún lugar.

NOTA: el nombre de ruta real que uso no es "prueba" sino algo más oscuro que estoy seguro de que no tiene nombre en ninguna parte.

¿Ayuda por favor?


Es posible que haya una prueba de nombre de carpeta oculta en el directorio. Verifique manualmente si existe.

ls -a

Crear solo si no existe

if not os.path.exists(test): os.makedirs(test)


La respuesta de Greg es correcta pero no llega lo suficientemente lejos. OSError tiene condiciones de error secundario y no desea suprimirlas todas las veces. Es prudente atrapar los errores esperados del sistema operativo.

Realice una comprobación adicional antes de decidir suprimir la excepción, como esto:

import errno import os try: os.mkdir(dirname) except OSError as exc: if exc.errno != errno.EEXIST: raise pass

Probablemente no desee suprimir errno.EACCES (Permiso denegado), errno.ENOSPC (No queda espacio en el dispositivo), errno.EROFS (Sistema de archivos de solo lectura), etc. O quizás desee hacerlo, pero eso es lo que necesita ser una decisión consciente basada en la lógica específica de lo que estás construyendo.

El código de Greg suprime todos los errores del sistema operativo; eso es inseguro al igual que except Exception es insegura.


Me pasó en Windows, tal vez este sea el caso:

Como tú, estaba tratando de:

os.mkdir(dirname)

y obtuve OSError: [Errno 17] File exists: ''<dirname>'' . Cuando corri

os.path.exists(dirname)

Me puse falsa, y me volví loco por un tiempo :)

El problema era: en una determinada ventana estaba en el directorio específico. A pesar de que no existía en ese momento (lo eliminé de Linux). La solución fue cerrar esa ventana / navegar a otro lugar. Vergonzoso, lo sé ...


No sé los detalles de su sistema de archivos. Pero si realmente quiere evitar esto, ¿puede usar una cláusula try / except?

try: os.mkdir(test) except OSError: print "test already exists"

Mientras tanto, siempre puedes hacer algún tipo de depuración.


Solo verifica si existe el camino. si no lo creas

if not os.path.exists(test): os.makedirs(test)


También enfrenté el mismo problema, especialmente, cuando la cadena ''prueba'' contiene el nombre del directorio múltiple. Así que cuando ''prueba'' contiene el directorio único -

if not os.path.exists(test): try: os.makedir(test) except: raise OSError("Can''t create destination directory (%s)!" % (test))

Si la ''prueba'' contiene varios directorios como ''/ dir1 / dir2'', entonces -

if not os.path.exists(test): try: os.makedirs(test) except: raise OSError("Can''t create destination directory (%s)!" % (test))


Usted tiene un archivo allí con el nombre de test . No puedes hacer un directorio con el mismo nombre exacto.