¿Cómo compruebo si un archivo existe sin excepciones?

Resuelto spence91 asked hace 16 años • 0 respuestas

¿Cómo verifico si un archivo existe o no sin utilizar la trydeclaración?

spence91 avatar Sep 17 '08 19:09 spence91
Aceptado

Si el motivo por el que estás comprobando es para poder hacer algo como if file_exists: open_it(), es más seguro utilizar un tryelemento para intentar abrirlo. Verificar y luego abrir corre el riesgo de que el archivo se elimine o se mueva o algo entre el momento en que lo verifica y el momento en que intenta abrirlo.

Si no planea abrir el archivo inmediatamente, puede usaros.path.isfile

Devuelve Truesi la ruta es un archivo normal existente. Esto sigue a enlaces simbólicos, por lo que tanto islink() como isfile() pueden ser verdaderos para la misma ruta.

import os.path
os.path.isfile(fname)

si necesita estar seguro de que es un archivo.

A partir de Python 3.4, el pathlibmódulo ofrece un enfoque orientado a objetos (compatible con pathlib2Python 2.7):

from pathlib import Path

my_file = Path("/path/to/file")
if my_file.is_file():
    # file exists

Para consultar un directorio, haga:

if my_file.is_dir():
    # directory exists

Para verificar si un Pathobjeto existe independientemente de si es un archivo o directorio, use exists():

if my_file.exists():
    # path exists

También puedes usar resolve(strict=True)en un trybloque:

try:
    my_abs_path = my_file.resolve(strict=True)
except FileNotFoundError:
    # doesn't exist
else:
    # exists
rslite avatar Sep 17 '2008 12:09 rslite

Úselo os.path.existspara verificar archivos y directorios:

import os.path
os.path.exists(file_path)

Úselo os.path.isfilepara verificar solo archivos (nota: sigue enlaces simbólicos ):

os.path.isfile(file_path)
PierreBdR avatar Sep 17 '2008 12:09 PierreBdR

A diferencia de isfile(), exists()volverá Truea los directorios. Entonces, dependiendo de si deseas solo archivos simples o también directorios, usarás isfile()o exists(). Aquí hay una salida REPL simple :

>>> os.path.isfile("/etc/password.txt")
True
>>> os.path.isfile("/etc")
False
>>> os.path.isfile("/does/not/exist")
False
>>> os.path.exists("/etc/password.txt")
True
>>> os.path.exists("/etc")
True
>>> os.path.exists("/does/not/exist")
False
bortzmeyer avatar Sep 17 '2008 15:09 bortzmeyer