В этой статье представлены различные способы проверки существования файла или каталога в Python.
Когда вы хотите открыть файл, а соответствующий файл или каталог по заданному пути не существует, Python вызывает исключение. Вы должны решить эту проблему, иначе ваш код выйдет из строя.
В этой статье представлены различные способы проверки существования файла или каталога в Python и способы безопасного открытия файла.
Используйте try-except блок
Прежде всего, вместо того, чтобы проверять, существует ли файл, совершенно нормально открыть его напрямую и заключить все в try-except блок. Эта стратегия также известна как EAFP (Легче попросить прощения, чем разрешения) и является вполне приемлемым стилем кодирования Python.
try:
f = open("filename.txt")
except FileNotFoundError:
# doesn’t exist
else:
# exists
Примечание. В Python 2 это была ошибка IOError .
Используйте os.path.isfile(), os.path.isdir(), или os.path.exists()
Если вы не хотите вызывать исключение или вам даже не нужно открывать файл, а просто нужно проверить, существует ли он, у вас есть другие варианты. Первый способ заключается в использовании различных методов в os.path:
os.path.isfile(path): возвращает True, если путь является допустимым файломos.path.isdir(path): возвращает True, если путь является допустимым каталогом: возвращает True, если путь является допустимым файлом или каталогомos.path.exists(path)
import os
if os.path.isfile("filename.txt"):
# file exists
f = open("filename.txt")
if os.path.isdir("data"):
# directory exists
if os.path.exists(file_path):
# file or directory exists
Использовать Path.is_file() из pathlib модуля
Начиная с Python 3.4 вы можете использовать модуль pathlib . Он предлагает объектно-ориентированный подход к работе с путями файловой системы.
Вы можете создать такой Path объект:
from pathlib import Path
my_file = Path("/path/to/file")
Теперь вы можете использовать различные методы is_file(), is_dir()и exists()для Path объекта:
if my_file.is_file():
# file exists
if my_file.is_dir():
# directory exists
if my_file.exists():
# file or directory exists