Введение
При написании сценариев Python вы можете захотеть выполнить определенное действие только в том случае, если существует файл или каталог. Например, вы можете захотеть прочитать или записать данные в файл конфигурации или создать файл, только если он еще не существует.
В Python существует множество различных способов проверки существования файла и определения типа файла.
В этом уроке мы покажем вам три разных метода проверки существования файла.
Проверьте, существует ли файл
Самый простой способ проверить, существует ли файл, — попытаться открыть файл. Этот подход не требует импорта каких-либо модулей и работает с Python 2 и 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, вы также можете использовать al 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
является каталогом или символической ссылкой на каталог.
Следующий код проверит, существует ли файл 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.