При написании скриптов Python вы можете захотеть выполнить определенное действие, только если файл или каталог существует или нет. Например, вы можете захотеть прочитать или записать данные в файл конфигурации или создать файл, только если он уже не существует.
В Python есть много разных способов проверить, существует ли файл, и определить его тип.
В этом руководстве показаны три различных метода проверки существования файла.
Содержание
Проверьте, существует ли файл
Самый простой способ проверить, существует ли файл, — это попытаться открыть файл. Этот подход не требует импорта какого-либо модуля и работает как с Python 2, так и с Python 3. Используйте этот метод, если вы хотите открыть файл и выполнить какое-либо действие.
В следующем фрагменте кода используется простой блок try-except. Мы пытаемся открыть файл filename.txt
, и если файл не существует, возникает исключение IOError
и 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
предоставляет несколько полезных функций для работы с os.path
путей. Модуль доступен как для Python 2, так и для 3.
В контексте этого руководства наиболее важными функциями являются:
os.path.exists(path)
— возвращает true, еслиpath
— это файл, каталог или допустимая символическая ссылка.-
os.path.isfile(path)
— возвращает истину, если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
возвращает истину, если path
является обычным файлом или символической ссылкой на файл. Чтобы проверить наличие каталога, используйте метод is_dir
.
Основное различие между pathlib
и os.path
заключается в том, что pathlib
позволяет вам работать с путями как с объектами Path
с соответствующими методами и атрибутами вместо обычных объектов str
.
Если вы хотите использовать этот модуль в Python 2, вы можете установить его с помощью pip :
pip install pathlib2
Выводы
В этом руководстве мы показали вам, как с помощью Python проверить, существует ли файл или каталог.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.