pros y contras entre os.path.exists vs os.path.isdir

78

Estoy verificando si existe un directorio, pero noté que estoy usando en os.path.existslugar de os.path.isdir. Ambos funcionan bien, pero tengo curiosidad por saber cuáles son las ventajas de usar en isdirlugar de exists.

usuario1834048
fuente

Respuestas:

131

os.path.existstambién regresará Truesi hay un archivo normal con ese nombre.

os.path.isdirsolo regresará Truesi esa ruta existe y es un directorio, o un enlace simbólico a un directorio.

Pavel Anossov
fuente
1
os.path.isdirestá volviendo verdadero para mí en un enlace simbólico.
Kaz
Estoy os.path.isdir('.ipynb_checkpoints')regresando de verdad
Little Bobby Tables
En Python 2.7, os.path.isdir devuelve verdadero para enlaces simbólicos a directorios y falso para enlaces simbólicos a archivos (como se esperaba). Sin embargo, esto puede causar problemas con os.rmdir porque fallará en un enlace simbólico incluso si es un enlace simbólico a un directorio.
Halsafar
6

Al igual que suena así: si la ruta existe, pero es un archivo y no un directorio, isdirregresará False. Mientras tanto, existsvolverá Trueen ambos casos.

Fredrick Brennan
fuente
2

os.path.isdir () comprueba si la ruta existe y es un directorio y devuelve TRUE para el caso.

De manera similar, os.path.isfile () comprueba si la ruta existe y es un archivo y devuelve TRUE para el caso.

Y os.path.exists () comprueba si la ruta existe y no le importa si la ruta apunta a un archivo o directorio y devuelve TRUE en cualquiera de los casos.

Manoz
fuente
0

La mayoría de las veces es lo mismo.

Pero, la ruta puede existir físicamente mientras que path.exists()devuelve False. Este es el caso si os.stat () devuelve False para este archivo.

Si la ruta existe físicamente, path.isdir()siempre devolverá True. Esto no depende de la plataforma.

Kiriloff
fuente
No está claro qué significa ese último párrafo. Si un directorio existe físicamente en un servidor remoto, pero no tengo conexión de red donde estoy ejecutando el script, seguramente isdir()no puedo saber si el directorio existe.
LarsH
Si está comprobando si existe un directorio en una ruta UNC, os.path.exists puede devolver falso cuando realmente existe (incluso con la conexión funcionando), pero os.path.isdir devolverá el valor correcto. Para un archivo en el caso de ruta UNC simlar, también debe usar os.path.isfile en lugar de os.path.exists por la misma razón.
miigotu
0

os.path.exists (ruta) Devuelve Verdadero si la ruta se refiere a una ruta existente. Una ruta existente puede ser archivos normales ( http://en.wikipedia.org/wiki/Unix_file_types#Regular_file ), pero también archivos especiales (por ejemplo, un directorio). Entonces, en esencia, esta función devuelve verdadero si la ruta proporcionada existe en el sistema de archivos en cualquier forma (a pesar de algunas excepciones, como enlaces simbólicos rotos).

os.path.isdir (ruta) a su vez solo devolverá verdadero cuando la ruta apunte a un directorio

Jan Kunigk
fuente
1
Esto realmente no responde a la pregunta del OP, que pregunta por las diferencias entre los dos comandos. Solo has detallado uno.
esqew