
При написании скриптов на Python может возникнуть необходимость выполнить определённое действие только в том случае, если файл или каталог существует или отсутствует. Например, может потребоваться прочитать или записать данные в файл конфигурации или создать файл, только если он ещё не существует.
В Python существует множество различных способов проверить, существует ли файл, и определить его тип.
В этом руководстве показаны три различных метода проверки существования файла.
Проверить, существует ли файл
Самый простой способ проверить существование файла — попытаться открыть его. Этот подход не требует импорта каких-либо модулей и работает как с Python 2, так и с Python 3. Используйте этот метод, если хотите открыть файл и выполнить какое-либо действие.
В следующем фрагменте кода используется простой блок try-except. Мы пытаемся открыть файл filename.txt , и если файл не существует, возникает исключение IOError и выводится сообщение «Файл недоступен».
try : f = open ( "filename.txt" ) # Do something with the file except IOError : print ( "File not accessible" ) finally : f . close ()
Если вы используете Python 3, вы также можете использовать FileNotFoundError вместо исключения IOError .
При открытии файлов рекомендуется использовать ключевое слово with , которое гарантирует корректное закрытие файла после завершения операций с ним, даже если во время операции возникнет исключение. Кроме того, это сокращает код, поскольку не требуется закрывать файл с помощью функции close .
Следующий код эквивалентен предыдущему примеру:
try : with open ( '/etc/hosts' ) as f : print ( f . readlines ()) # Do something with the file except IOError : print ( "File not accessible" )
В приведенных выше примерах мы использовали блок try-except и открывали файл, чтобы избежать состояния гонки. Состояние гонки возникает, когда несколько процессов обращаются к одному и тому же файлу.
Например, при проверке существования файла другой процесс может создать, удалить или заблокировать файл в промежутке времени между проверкой и открытием файла. Это может привести к сбою кода.
Проверка существования файла с помощью модуля os.path
Модуль os.path предоставляет ряд полезных функций для работы с путями. Он доступен для Python 2 и 3.
В контексте данного руководства наиболее важными функциями являются:
-
os.path.exists(path)— возвращает true, еслиpathявляется файлом, каталогом или допустимой символической ссылкой. -
os.path.isfile(path)— возвращает true, еслиpathявляется обычным файлом или символической ссылкой на файл. -
os.path.isdir(path)— возвращает true, еслиpathявляется каталогом или символической ссылкой на каталог.
Следующий оператор if проверяет, существует ли файл filename.txt :
import os.path if os . path . isfile ( 'filename.txt' ): print ( "File exist" ) else : print ( "File not exist" )
Используйте этот метод, когда вам нужно проверить, существует ли файл, перед выполнением какого-либо действия с ним. Например, перед копированием или удалением файла .
Если вы хотите открыть и изменить файл, предпочтительнее использовать предыдущий метод.
Проверьте, существует ли файл, используя модуль pathlib
Модуль pathlib доступен в Python 3.4 и выше. Он предоставляет объектно-ориентированный интерфейс для работы с путями файловой системы в различных операционных системах.
Как и в предыдущем примере, следующий код проверяет существование файла filename.txt :
from pathlib import Path if Path ( 'filename.txt' ) . is_file (): print ( "File exist" ) else : print ( "File not exist" )
is_file возвращает true, если path является обычным файлом или символической ссылкой на файл. Для проверки существования каталога используйте метод is_dir .
Основное различие между pathlib и os.path заключается в том, что pathlib позволяет работать с путями как с объектами Path с соответствующими методами и атрибутами вместо обычных объектов str .
Если вы хотите использовать этот модуль в Python 2, вы можете установить его с помощью pip :
pip install pathlib2
Заключение
В этом руководстве мы показали вам, как проверить существование файла или каталога с помощью Python.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства