Как проверить, существует ли файл или каталог в Python

При написании скриптов 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 проверить, существует ли файл или каталог.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Оставьте комментарий