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