В этой статье представлены различные способы проверки существования файла или каталога в 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