Вопрос-Ответ

How do I check whether a file exists without exceptions?

Как мне проверить, существует ли файл без исключений?

Как мне проверить, существует файл или нет, без использования оператора try?

Переведено автоматически
Ответ 1

Если причина, по которой вы проверяете, заключается в том, что вы можете сделать что-то вроде if file_exists: open_it(), безопаснее использовать try при попытке его открытия. При проверке и последующем открытии файл может быть удален или перемещен, или что-то среднее между проверкой и попыткой его открыть.

Если вы не планируете открывать файл немедленно, вы можете использовать os.path.isfile


Возвращает, True если path является существующим обычным файлом. Это следует символическим ссылкам, поэтому оба islink() и isfile() могут быть верны для одного и того же пути.


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

если вам нужно быть уверенным, что это файл.

Начиная с Python 3.4, pathlib модуль предлагает объектно-ориентированный подход (перенесенный в pathlib2 Python 2.7):

from pathlib import Path

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

Чтобы проверить каталог, выполните:

if my_file.is_dir():
# directory exists

Чтобы проверить, существует ли Path объект независимо от того, является ли он файлом или каталогом, используйте exists():

if my_file.exists():
# path exists

Вы также можете использовать resolve(strict=True) в try блоке:

try:
my_abs_path = my_file.resolve(strict=True)
except FileNotFoundError:
# doesn't exist
else:
# exists
Ответ 2

Используйте os.path.exists для проверки как файлов, так и каталогов:

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

Используйте os.path.isfile для проверки только файлов (примечание: следует за символическими ссылками):

os.path.isfile(file_path)
Ответ 3

В отличие от isfile(), exists() будет возвращать True для каталогов. Итак, в зависимости от того, нужны ли вам только обычные файлы или также каталоги, вы будете использовать isfile() или exists(). Вот несколько простых результатов REPL:

>>> 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
Ответ 4
import os

if os.path.isfile(filepath):
print("File exists")
python file