Ошибка отсутствия файла python

Кратко: вместо if exists(): open() используйте просто open().


Если проверка нужна, чтобы выполнить позднее какую-либо операцию с файлом, то лучше прямо выполнить эту операцию и поймать возможные ошибки (предполагая, что вы на том же уровне ошибки хотите обработать):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
try:
    file = open('input.txt')
except IOError as e:
    print(u'не удалось открыть файл')
else:
    with file:
        print(u'делаем что-то с файлом')

Предварительная проверка всё равно не гарантирует, что файл всё ещё будет существовать позднее и всё равно придётся ошибки обрабатывать.

В Питоне часто предпочтителен «Проще просить прощения, чем разрешения» ( «It is Easier to Ask for Forgiveness than Permission» — EAFP) подход вместо «Look before you leap.» более распространённого в С.


Ответы на комментарии:

  1. Где блок finally в котором вы закрывается поток

finally здесь не нужен. Если код попал в except блок, то файл не открыт — нечего закрывать. В else ветке, где файл открыт, with file: конструкция всегда закрывает файл при выходе из блока (нормальном или когда исключение возникло).

  1. Конструкция try-exept-else многими считается плохо читаемой.

Обычно try/except не используется на том же уровне, то есть в коде используется просто:

with open('input.txt') as file:
    print(u'делаем что-то с файлом')

а возможные исключения выше по стеку обрабатываются. Но если вы хотите обработать ошибку в open() на том же уровне, то вы обязаны использовать try/except (open() сигнализирует ошибки с помощью исключений).

  1. Каждый раз, когда файла нет, вы вызываете прерывание ОС (на нем строится механизм обработки исключения) самостоятельно, не слишком ли это раcточительно?

Исключения выбрасываются в случае ошибки в Питоне хотите вы этого или нет. Вот реализация os.path.exists() из стандартной библиотеки:

def exists(path):
    try:
        os.stat(path)
    except OSError:
        return False
    return True

фактически, используя open() напрямую, а не if exists(): open() мы уменьшаем количество системных вызовов.

  1. Ваш код занял 7 строчек, не лучше ли эту задачу поручить операционной системе командой os.path.exists(path_to_file) в пару строчек ?

Длина кода, который не работает, не имеет значения. Ещё раз: вызов os.path.exists() не гарантирует что файл существует когда вы попытаетесь вызвать open() позднее: всё равно придётся обрабатывать ошибки.

Стоит упомянуть, что если отсутствие файла не является ошибкой в вашем случае (ожидается программой), то вполне можно os.path.exists() или его аналоги использовать, чтобы подчеркнуть вероятность отсутствия файла для читателя кода (но так как последующее открытие файла может быть всё равно неудачным, то это не освобождает код от добавления обработки ошибок, подходящего для вашей задачи, такого как try/except выше).

Разрабатывая приложения вам придется работать с файлами, анализировать большие объемы данных, сохранять пользовательские данные, чтобы они не терялись по завершению работы программы. Также при работе с файлами важно научиться обрабатывать ошибки, чтобы они не привели к аварийному завершению программы. Для этого в Python существуют специальные объекты — исключения, которые создаются для управления ошибок.

Содержание страницы:
1. Чтение файла 
    1.2. Чтение больших файлов и работа с ними
    1.3. Анализ текста из файла
2. Запись в файл
    2.1. Запись в пустой файл
    2.2. Многострочная запись в файл
    2.3. Присоединение данных к файлу
3. Исключения
    3.1. Блоки try-except
    3.2. Блоки try-except-else
    3.3. Блоки try-except с текстовыми файлами
    3.4. Ошибки без уведомления пользователя

1. Чтение файла в Python

В файлах может содержаться любой объем данных, начиная от небольшого рассказа и до сохранения истории погоды за столетия. Чтение файлов особенно актуально для приложений, предназначенных для анализа данных. Приведем пример простой программы, которая открывает файл и выводит его содержимое на экран. В примере я буду использовать файл с числом «Пи» с точностью до 10 знаков после запятой. Скачать этот файл можно прямо здесь ( pi_10.txt ) или самим создать текстовый файл и сохранить под любым именем. Пример программы, которая открывает файл и выводит содержимое на экран:

with open(‘pi_10.txt’) as file_pi:
    digits = file_pi.read()
print(digits)

Код начинается с ключевого слова with. При использование ключевого слова with используемый файл открывается с помощью функции open(), а закрывается автоматически после завершения блока with и вам не придется в конце вызывать функцию close(). Файлы можно открывать и закрывать явными вызовами open() и close(). Функция open() получает один аргумент — имя открываемого файла, в нашем случае ‘pi_10.txt’. Python ищет указанный файл в каталоге, где хранится файл текущей программы. Функция open() возвращает объект, представляющий файл ‘pi_10.txt’. Python сохраняет этот объект в переменной file_pi .  

После появления объекта, представляющего файл ‘pi_10.txt’, используется метод read(), который читает все содержимое файла и сохраняет его в одной строке в переменной contents. В конце с помощью функции print содержимое выводится на экран. Запустив этот файл, мы получим данные, находящиеся в нашем файле ‘pi_10.txt’.

3.1415926535

В случае, если файл расположен не в одном каталоге с файлом программы, необходимо указать путь, чтобы Python искал файлы в конкретном месте. Существует два пути как прописать расположение файла:

  •  Относительный путь. 

Относительный путь приказывает Python искать файлы в каталоге, который задается относительно каталога, в котором находится текущий файл программы

with open(‘files/имя_файла.txt’) as file:

  • Абсолютный путь. 

Местонахождение файла не зависит от того, где находится ваша программа. Абсолютные пути обычно длиннее относительных, поэтому их лучше сохранить в переменную и затем передать функции open()

file_path = ‘/Users/Desktop/files/имя_файла.txt’
with open(file_path) as file:

С абсолютными путями можно читать файлы из любого каталога вашей системы. 

1.2. Чтение больших файлов на Python и работа с ними

В первом примере был файл с 10 знаками после запятой. Теперь давайте проанализируем файл с миллионом знаков числа «Пи» после запятой. Скачать число «Пи» с миллионом знаков после запятой можно отсюда( ‘pi_1000000.txt’ ). Изменять код из первого примера не придется, просто заменим файл, который должен читать Python. 

Выведем на экран первые 100 знаков после запятой. Добавим в конец функцию len, чтобы узнать длину файла

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

1000002

Из выходных данных видно, что строка содержит значение «Пи» с точностью до 1 000 000 знаков после запятой. В Python нет никаких ограничений на длину данных, с которыми можно работать, единственное ограничение это объем памяти вашей системы. 

После сохранения данных в переменной можно делать с ними все что угодно. Давайте проверим, входит ли в число «Пи» дата вашего дня рождения. Напишем небольшую программу, которая будет читать файл и проверять входит ли дата день рождения в первый миллион числа «Пи»:

with open(‘pi_1000000.txt‘) as file_pi:
    digits = file_pi.read()
birthday = input(«Введите дату дня рождения: «)
if birthday  in digits:
    print(«Ваш день рождение входит в число ‘Пи'»)
else:
    print(«Ваш день рождение не входит в число ‘Пи'»)

Начало программы не изменилось, читаем файл и сохраняем данные в переменной digits. Далее запрашиваем данные от пользователя с помощью функции input и сохраняем в переменную birstday. Затем проверяем вхождение birstday в digits с помощью команды if-else. Запустив несколько раз программу, получим результат:

Введите дату дня рождения: 260786
Ваш день рождение не входит в число ‘Пи’

Введите дату дня рождения: 260884
Ваш день рождение входит в число ‘Пи’

В зависимости от введенных данных мы получили результат вхождения или не вхождения дня рождения в число «Пи»

Важно: Читая данные из текстового файла, Python интерпретирует весь текст как строку. Если вы хотите работать с ним в числовом контексте, то преобразуйте данные в целое число функцией int() или в вещественное число функцией float().

1.3. Анализ текста из файла на Python

Python может анализировать текстовые файлы, содержащие целые книги. Возьмем книгу «Алиса в стране чудес» и попробуем подсчитать количество слов в книге. Текстовый файл с книгой можете скачать здесь(‘ alice ‘) или загрузить любое другое произведение. Напишем простую программу, которая подсчитает количество слов в книге и сколько раз повторяется имя Алиса в книге.

filename = ‘alice.txt’

with open(filename, encoding=’utf-8′) as file:
    contents = file.read()
n_alice = contents.lower().count(‘алиса’)
words = contents.split()
n_words = len(words)

print(f»Книга ‘Алиса в стране чудес’ содержит {n_words} слов.»)
print(f»Имя Алиса повторяется {n_alice} раз.»)

При открытии файла добавился аргумент encoding=’utf-8′. Он необходим, когда кодировка вашей системы не совпадает с кодировкой читаемого файла. После чтения файла, сохраним его в переменной contents.

Для подсчета вхождения слова или выражений в строке можно воспользоваться методом count(), но прежде привести все слова к нижнему регистру функцией lower(). Количество вхождений сохраним в переменной n_alice

Чтобы подсчитать количество слов в тексе, воспользуемся методом split(), предназначенный для построения списка слов на основе строки. Метод split() разделяет строку на части, где обнаружит пробел и сохраняет все части строки в элементах списка. Пример метода split():

title = ‘Алиса в стране чудес’
print(title.split())

[‘Алиса’, ‘в’, ‘стране’, ‘чудес’]

После использования метода split(), сохраним список в переменной words и далее подсчитаем количество слов в списке, с помощью функции len(). После подсчета всех данных, выведем на экран результат:

Книга ‘Алиса в стране чудес’ содержит 28389 слов.
Имя Алиса повторяется 419 раз.

2.1. Запись в пустой файл в Python

Самый простой способ сохранения данных, это записать их в файл. Чтобы записать текс в файл, требуется вызвать open() со вторым аргументом, который сообщит Python что требуется записать файл. Пример программы записи простого сообщения в файл на Python:

filename = ‘memory.txt’

with open(filename, ‘w’) as file:
    file.write(«Язык программирования Python»)

Для начала определим название и тип будущего файла и сохраним в переменную filename. Затем при вызове функции open() передадим два аргумента. Первый аргумент содержит имя открываемого файла. Второй аргумент ‘ w ‘ сообщает Python, что файл должен быть открыт в режиме записи. Во второй строчке метод write() используется для записи строки в файл. Открыв файл ‘ memory.txt ‘ вы увидите в нем строку:

Язык программирования Python

Получившийся файл ничем не отличается от любых других текстовых файлах на компьютере, с ним можно делать все что угодно. 

Важно: Открывая файл в режиме записи ‘ w ‘, если файл уже существует, то Python уничтожит его данные перед возвращением объекта файла.

Файлы можно открывать в режимах:

  • чтение ‘ r ‘
  • запись ‘ w ‘
  • присоединение ‘ a ‘
  • режим как чтения, так и записи ‘ r+ ‘

2.2. Многострочная запись в файл на Python

При использовании функции write() символы новой строки не добавляются в записываемый файл:

filename = ‘memory.txt’

with open(filename, ‘w’) as file:
    file.write(«Язык программирования Python»)
    file.write(«Язык программирования Java»)
    file.write(«Язык программирования Perl»)

В результате открыв файл мы увидим что все строки склеились:

Язык программирования PythonЯзык программирования JavaЯзык программирования Perl

Для написания каждого сообщения с новой строки используйте символ новой строки n

filename = ‘memory.txt’

with open(filename, ‘w’) as file:
    file.write(«Язык программирования Pythonn«)
    file.write(«Язык программирования Javan«)
    file.write(«Язык программирования Perln«)

Результат будет выглядеть так:

Язык программирования Python
Язык программирования Java
Язык программирования Perl

2.3. Присоединение данных к файлу на Python 

Для добавления новых данных в файл, вместо того чтобы постоянно перезаписывать файл, откройте файл в режиме присоединения ‘ a ‘. Все новые строки добавятся в конец файла. Возьмем созданный файл из раздела 2.2 ‘memory.txt’. Добавим в него еще пару строк.

filename = ‘memory.txt’

with open(filename, ‘a’) as file:
    file.write(«Hello worldn»)
    file.write(«Полет на лунуn»)

В результате к нашему файлу добавятся две строки:

Язык программирования Python
Язык программирования Java
Язык программирования Perl
Hello world
Полет на луну

3. Исключения в Python

При выполнении программ могут возникать ошибки, для управления ими Python использует специальные объекты, называемые исключениями. Когда в программу включен код обработки исключения, ваша программа продолжится, а если нет, то программа остановится и выведет трассировку с отчетом об исключении. Исключения обрабатываются в блоках try-except. С блоками try-except программы будут работать даже в том случае, если что-то пошло не так.

3.1. Блоки try-except на Python

Приведем пример простой ошибки деления на ноль:

print(7/0)

Traceback (most recent call last):
  File «example.py», line 1, in <module>
    print(7/0)
ZeroDivisionError: division by zero

Если в вашей программе возможно появление ошибки, то вы можете заранее написать блок try-except для обработки данного исключения. Приведем пример обработки ошибки ZeroDivisionError с помощью блока try-except:

try:
    print(7/0)
except ZeroDivisionError:
    print(«Деление на ноль запрещено»)

Команда print(7/0) помещена в блок try. Если код в блоке try выполняется успешно, то Python пропускает блок except.  Если же код в блоке try создал ошибку, то Python ищет блок except и запускает код в этом блоке. В нашем случае в блоке except выводится сообщение «Деление на ноль запрещено». При выполнение этого кода пользователь увидит понятное сообщение:

Деление на ноль запрещено

Если за кодом try-except следует другой код, то Python продолжит выполнение программы. 

3.2. Блок try-except-else на Python

Напишем простой калькулятор, который запрашивает данные у пользователя, а затем результат деления выводит на экран. Сразу заключим возможную ошибку деления на ноль  ZeroDivisionError и добавим блок else при успешном выполнение блока try.

while True:
    first_number = input(«Введите первое число: «)
    if first_number == ‘q’:
        break
    second_number = input(«Введите второе число: «)
    if second_number == ‘q’:
        break
    try:
        a = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print(«Деление на ноль запрещено»)
    else:
        print(f»Частное двух чисел равно {a}»)

Программа запрашивает у пользователя первое число (first_number), затем второе (second_number). Если пользователь не ввел » q « для завершения работы программа продолжается. В блок try помещаем код, в котором возможно появление ошибки. В случае отсутствия ошибки деления, выполняется код else и Python выводит результат на экран. В случае ошибки ZeroDivisionError выполняется блок except и выводится сообщение о запрете деления на ноль, а программа продолжит свое выполнение. Запустив код получим такие результаты:

Введите первое число: 30
Введите второе число: 5
Частное двух чисел равно 6.0
Введите первое число: 7
Введите второе число: 0
Деление на ноль запрещено
Введите первое число:  q

В результате действие программы при появлении ошибки не прервалось.

3.3. Блок  try-except с текстовыми файлами на Python

Одна из стандартных проблем при работе с файлами, это отсутствие необходимого файла, или файл находится в другом месте и Python не может его найти. Попробуем прочитать не существующий файл:

filename = ‘alice_2.txt’

with open(filename, encoding=’utf-8′) as file:
    contents = file.read()

Так как такого файла не существует, Python выдает исключение:

Traceback (most recent call last):
  File «example.py», line 3, in <module>
    with open(filename, encoding=’utf-8′) as file:
FileNotFoundError: [Errno 2] No such file or directory: ‘alice_2.txt’

FileNotFoundError — это ошибка отсутствия запрашиваемого файла. С помощью блока try-except обработаем ее:

filename = ‘alice_2.txt’

try:
    with open(filename, encoding=’utf-8′) as file:
        contents = file.read()
except FileNotFoundError:
    print(f»Запрашиваемый файл {filename } не найден»)

В результате при отсутствии файла мы получим:

Запрашиваемый файл alice_2.txt не найден

3.4. Ошибки без уведомления пользователя

В предыдущих примерах мы сообщали пользователю об ошибках. В Python есть возможность обработать ошибку и не сообщать пользователю о ней и продолжить выполнение программы дальше. Для этого блок try пишется, как и обычно, а в блоке except вы прописываете Python не предпринимать никаких действий с помощью команды pass. Приведем пример ошибки без уведомления:

ilename = ‘alice_2.txt’

try:
    with open(filename, encoding=’utf-8′) as file:
        contents = file.read()
except FileNotFoundError:
    pass

В результате при запуске этой программы и отсутствия запрашиваемого файла ничего не произойдет.

Далее: Функции json. Сохранение данных Python

Назад: Классы в Python

Руководство для тех, кому нужно узнать, существует ли файл (или папка) при помощи встроенных возможностей и функций Python из стандартной библиотеки.

Способность проверять, существует ли файл на диске или нет — очень важно для большинства программ Python:

Возможно, вам нужно убедиться в том, что файл с данным доступен, перед тем как вы попробуете загрузить его, или вам нужно предотвратить повторную запись файла в Python. Это же подходит и для папок. Возможно, вам нужно убедиться в том, что папка доступна, перед тем как ваша программа запустится.

В Python есть несколько способов подтвердить существование папки или файла, пользуясь встроенными в ядро языка функциями и стандартной библиотекой Python.

В данном руководстве вы увидите три отдельные техники для проверки существования файла в Python, с примерами кода и характерными преимуещствами и недостатками.

Приступим!

Самый простой способ проверки существования файла в Python — это использование методов exists() и isfile() из модуля os.path в стандартной библиотеке.

Эти функции доступны в Python 2 и Python 3.7, и обычно их рекомендуют в первую очередь, если обращаться за помощью к документации Python или гуглу за решением проблемы.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Вот пример того, как работать с функцией os.path.exists(). Мы проверим несколько путей (файлы и папки) на наличие:

import os.path

check_file = os.path.exists(‘storage/music.mp3’) # True

print(os.path.exists(‘нет-такого-файла.txt’)) # False

# Проверяем если папка существует.

os.path.exists(‘storage’) # True

Как мы видим, вызов os.path.exists() возвращает True для файлов и папок. Если вы хотите убедиться, что заданный путь указывает на файл, но не на папку, вы можете использовать функцию os.path.isfile()

import os.path

os.path.isfile(‘storage/music.mp3’) # True

os.path.isfile(‘нет-такого-файла.txt’) # False

os.path.isfile(‘storage’) # False, папка существует но это не файл.

Для обеих функций важно помнить о том, что они проверяют только существует файл, или нет, а не наличие доступа программы к нему. Если подтверждение доступа к файлу важно, то вам нужно выполнить  простое открытия файла и поймать исключение IOError.

Мы вернемся к этой технике, когда будем подводить итоги в конце руководства. Но перед этим, рассмотрим еще один способ проверки существования файла в Python.

Проверка существует ли файл используя open() и try … except

Мы только что рассматривали, как функции в модуле os.path могут быть использованы для проверки существования файла или папки.

Есть еще один прямолинейный алгоритм Python для проверки существования файла: Вы просто пытаетесь открыть файл при помощи встроенной функции open(), вот так:

open(‘нет-такого-файла.txt’)

    FileNotFoundError:

«[Errno 2] No such file or directory: ‘нет-такого-файла.txt'»

Если файл существует, то файл успешно откроется и вернет валидный объект для дальнейшей обработки файла. Если файл не существует, появится ошибка FileNotFoundError:

Ошибка FileNotFoundError возникает, когда файл или папка запрошена, но не существует. Относится к errno ENOENT.

Это значит, что вы можете получить ошибку FileNotFoundError в своем коде, и использовать ее для обнаружения того, существует файл или нет. Вот пример кода, который демонстрирует работу этой техники:

try:

    f = open(‘нет-такого-файла.txt’)

    f.close()

except FileNotFoundError:

    print(‘Файл не существует!’)

Обратите внимание, мы мгновенно вызываем метод close() для объекта файла для освобождения дескриптора файла. Это считается хорошей практикой при работе с файлами в Python:

Если вы не закроете дескриптор файлов, то будет сложно понять, когда именно он будет закрыт автоматически во время работы Python. Это занимает ресурсы системы и может снизить производительность ваших программ.

Вместо того, чтобы закрывать файл при помощи метода close(), есть еще один способ, которым можно воспользоваться контекстным менеджером и оператора with для автоматического закрытия файла.

Теперь, та же техника “просто попробуем открыть файл” также работает для выяснения, является ли файл доступным и читаемым. Вместо поиска ошибок FileNotFoundError, вам нужно искать любые ошибки типа IOError:

try:

    f = open(‘new-music.mp3’)

    f.close()

except IOError:

    print(‘Файл недоступен’)

print(‘Файл доступен’)

Если вы часто используете этот шаблон, вы можете выделить его в вспомогательную функцию, которая позволит вам проверить, существует ли файл и является ли он в то же время доступным:

def is_accessible(path, mode=‘r’):

    «»»

    Проверка, является ли файл или папка из `path`

    доступным для работы в предоставленным `mode` формате.

    «»»

    try:

        f = open(path, mode)

        f.close()

    except IOError:

        return False

    return True

Как альтернатива, вы можете использовать функцию os.access() из стандартной библиотеке для проверки того, существует ли файл и является ли он доступным в то же время. Это может быть похоже на использование функции path.exists(), если файл существует.

Использование open() и try ... except имеет некоторые преимущества, когда доходит до обработки файлов в Python. Это может помочь вам избежать накладок, вызванных определенными условиями существования файла:

Представим, что файл существует в тот момент, когда вы запускаете проверку, файл удаляется другим процессом независящий от вас. Когда вы пытаетесь открыть файл для работы с ним, он исчезает и ваша программа получает ошибку.

Мы рассмотрим этот случай в конце руководства. Но перед этим, запрыгнем в еще одну кроличью нору. Рассмотрим еще один способ того, как проверить, существует ли файл в Python.

Пример проверки существования файла pathlib.Path.exists() (Python 3.4+)

Python 3.4 и выше содержит модуль pathlib, который предоставляет объектно-ориентированный интерфейс для работы с путями файловых систем. Использование этого модуля намного приятнее, чем работа с путями в виде объектов строк.

Он предоставляет абстракции и вспомогательные функции для множества операций с файловыми системами, включая проверку на наличие и поиск того, указывает ли путь на файл или папку.

Чтобы узнать, указывает ли путь на настоящий файл, вы можете использовать метод Path.exists(). Чтобы узнать, является путь файлом, или символической ссылкой, а не папкой, вам захочется воспользоваться Path.is_file().

Вот рабочий пример для обоих методов pathlib.Path:

import pathlib

path = pathlib.Path(‘music.mp3’)

print(path.exists()) # True

print(path.is_file()) # True

Как мы видим, этот подход по своему принципу схож с проверкой при помощи функций из модуля os.path.

Главное отличие в том, что pathlib предоставляет более чистый объекно-ориентированный интерфейс для работы с файловой системой. Вам больше не нужно работать с объектами str, представляющими пути файлов — вместо этого, вы обрабатываете объекты Path с релевантными методами и связанными с ними атрибутами.

Использование pathlib и преимущества объектно-ориентированного интерфейса может сделать ваш код обработки более читаемым и понятным. Не будем лгать и говорить, что это панацея. Но в ряде случаев это может помочь вам написать более “лучшую” версию программы Python.

Модуль pathlib также доступен как сторонний модуль с бэкпортом для PyPl, который работает на Python 2.x и 3.х Вы можете найти его здесь: pathlib2.

Подведем итоги проверки на наличие файла в Python

В данном руководстве мы сравнили три разных метода определения наличия или отсутствия файла в Python. Один метод также позволяет нам проверить, существует ли файл и является ли он доступным в то же время.

Конечно, имея в распоряжении три способа, вы можете подумать:

Какой способ проверки наличия файла при помощи Python является предпочтительнее?

В большинстве случаев, когда вам нужно проверить наличие файла, рекомендуется использование встроенного метода pathlib.Path.exists() на Python 3.4 и выше, или функцию os.path.exists() для Python 2.

Однако, есть одна важная оговорка…

Следует помнить о том, что файл который считается существующим, после проведения проверки может исчезнуть из за других программ который с ним работают.

Хотя вероятность такого события невысока, вполне может быть так, что файл будет существовать только во время проверки, и мгновенно будет удален после.

Чтобы избежать такой ситуации, стоит опираться не только на вопрос “существует ли файл?”. Вместо этого, неплохо просто попытаться сразу выполнить желаемую операцию. Это также называется “easier to ask for forgiveness than permission” (EAFP) (проще просить прощения, чем разрешения). Такой подход часто рекомендуется при работе с Python.

Например, вместо проверки того, существует ли файл перед тем, как его открыть, вам захочется просто попробовать открыть его и готовиться ловить ошибку FileNotFoundError, которая говорит нам о том, что файл недоступен. Это позволит избежать состояния гонки.

Итак, если вы планируете работать с файлом сразу после проверки, например, прочитать его содержимое путем внесение новых данных в него, рекомендуется выполнить проверку на наличие при помощи метода open() с последующей обработкой ошибки, пользуясь подходом EAFP. Это позволит вам избежать состояния гонки в вашем коде обработки файлов Python.

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: vasile.buldumac@ati.utm.md

Образование
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»

Sometimes the need to check whether a directory or file exists or not becomes important because maybe you want to prevent overwriting to the already existing file, or maybe you want to make sure that the file is available or not before loading it. 
There are various ways to check whether a file or directory already exists or not.

  • Using os.path.exists() 
  • Using os.path.isfile() 
  • Using os.path.isdir() 
  • Using pathlib.Path.exists() 

Using os.path.exists() to check if file exists

OS module in Python provides functions for interacting with the operating system. OS comes under Python’s standard utility modules. This module provides a portable way of using operating system-dependent functionality. os.path module is a submodule of the OS module in Python used for common path name manipulation.
Note: To know more about the os module.
os.path.exists a () method in Python is used to check whether the specified path exists or not. This method can also be used to check whether the given path refers to an open file descriptor or not.

Syntax: os.path.exists(path)
Parameter: 

  • path: A path-like object representing a file system path. A path-like object is either a string or bytes object representing a path.

Return:  Returns a boolean representing whether the path exists or not.

Example: Checking if a path exists using os.path.exists()

Python3

import os

path = '/usr/local/bin/'

isExist = os.path.exists(path)

print(isExist)

path = '/home/User/Desktop/file.txt'

isExist = os.path.exists(path)

print(isExist)

Output: 

True
False

Using os.path.isfile() Method to check if file exists

os.path.isfile() method in Python is used to check whether the specified path is an existing regular file or not.

Syntax: os.path.isfile(path)
Parameter: 
path: A path-like object representing a file system path. A path-like object is either a string or bytes object representing a path.
Return Type: This method returns a Boolean value of class bool. This method returns True if specified path is an existing regular file, otherwise returns False. 

Example:

Checking if a path pointing to a resource is a file

Python3

import os

path = 'C:/Users/gfg/Desktop/file.txt'

isFile = os.path.isfile(path)

print(isFile)

path = '/home/User/Desktop/'

isFile = os.path.isfile(path)

print(isFile)

Output: 

True
False

Using os.path.isdir() Method to check if file exists

os.path.isdir() method in Python is used to check whether the specified path is an existing directory or not. This method follows a symbolic link, which means if the specified path is a symbolic link pointing to a directory, then the method will return True.

Syntax: os.path.isdir(path)
Parameter: 

  • path: A path-like object representing a file system path.

Return Type: This method returns a Boolean value of class bool. This method returns True if specified path is an existing directory, otherwise returns False. 

Example: 

Check if a path is a directory using os.path.isdir()

Python3

import os.path

path = '/home/User/Documents/file.txt'

isdir = os.path.isdir(path)

print(isdir)

path = '/home/User/Documents/'

isdir = os.path.isdir(path)

print(isdir)

Output: 

False
True

Example: 
If the specified path is a symbolic link.

Python3

import os.path  

dirname = "GeeksForGeeks"

os.mkdir(dirname)

symlink_path = "/home/User/Desktop/gfg"

os.symlink(dirname, symlink_path)

path = dirname

isdir = os.path.isdir(path)

print(isdir)

path = symlink_path

isdir = os.path.isdir(path)

print(isdir)

Output: 

True
True

Using pathlib.Path.exists() to check if the file exists

pathlib module in Python provides various classes representing file system paths with semantics appropriate for different operating systems. This module comes under Python’s standard utility modules. Path classes in pathlib module are divided into pure paths and concrete paths. Pure paths provide only computational operations but do not provide I/O operations, while concrete paths inherit from pure paths provide computational as well as I/O operations. You can read about pathlib module in detail here.
pathlib.Path.exists() method is used to check whether the given path points to an existing file or directory or not.

Syntax: pathlib.Path.exists(path)
Parameter: 
path: A path-like object representing a file system path.
Return Type: This method returns a Boolean value of class bool. This method returns True if path exists otherwise returns False. 
 

Example: 

Check if the path exists using pathlib module

Python3

from pathlib import Path

path = '/home/tuhingfg/Desktop'

obj = Path(path)

print("path exists?", obj.exists())

Output: 

True

Last Updated :
25 Mar, 2023

Like Article

Save Article

How to Check if a File Exists in Python with isFile() and exists()

When working with files in Python, there may be times when you need to check whether a file exists or not.

But why should you check if a file exists in the first place?

Confirming the existence of a specific file comes in handy when you want to perform particular operations, such as opening, reading from, or writing to that file.

If you attempt to perform any of the operations mentioned above and the file doesn’t exist, you will come across bugs and your program will end up crashing.

So, to perform operations and prevent your program from crashing, it is a helpful first step to check if a file exists on a given path.

Thankfully, Python has multiple built-in ways of checking whether a file exists, like the built-in os.path and pathlib modules.

Specifically, when using the os.path module, you have access to:

  • the os.path.isfile(path) method that returns True if the path is a file or a symlink to a file.
  • the os.path.exists(path) method that returns True if the path is a file, directory, or a symlink to a file.

And when using the pathlib module, you have access to the pathlib.Path(path).is_file() function, which returns True if path is a file and it exists.

In this article, you will learn how to use Python to check if a file exists using the os.path and pathlib modules.

Let’s dive in!

How to Check if a File Exists Using the os.path Module

The os module is part of the standard library (also known as stdlib) in Python and provides a way of accessing and interacting with the operating system.

With the os module, you can use functionalities that depend on the underlying operating system, such as creating and deleting files and folders, as well as copying and moving contents of folders, to name a few.

Since it is part of the standard library, the os module comes pre-packaged when you install Python on your local system. You only need to import it at the top of your Python file using the import statement:

import os

The os.path is a submodule of the os module.

It provides two methods for manipulating files — specifically the isfile() and exists() methods that output either True or False, depending on whether a file exists or not.

Since you will be using the os.path submodule, you will instead need to import that at the top of your file, like so:

import os.path

How to Check if a File Exists Using the os.path.isfile() Method in Python

The general syntax for the isfile() method looks like this:

os.path.isfile(path)

The method accepts only one argument, path, which represents the defined path to the file whose existence you want to confirm.

The path argument is a string enclosed in quotation marks.

The return value of the isfile() method is either a Boolean value — either True or False depending on whether that file exists.

Keep in mind that if the path ends in a directory name and not a file, it will return False.

Let’s see an example of the method in action.

I want to check whether an example.txt file exists in my current working directory, python_project.

The example.txt is on the same level as my Python file main.py, so I am using a relative file path.

I store the path to example.txt in a variable named path.

Then I use the isfile() method and pass path as an argument to check whether example.txt exists in that path.

Since the file does exist, the return value is True:

import os.path

path = './example.txt'

check_file = os.path.isfile(path)

print(check_file)

# output

# True

Ok, but what about absolute paths?

Here is the equivalent code when using an absolute path. The example.txt file is inside a python_project directory, which is inside my home directory, /Users/dionysialemonaki/:

import os.path

path = '/Users/dionysialemonaki/python_project/example.txt'

print(os.path.isfile(file_path))

# Output

# True

And as mentioned earlier, the isfile() method only works for files and not directories:

import os.path

path = '/Users/dionysialemonaki/python_project'

check_file = os.path.isfile(path)

print(check_file)

# output

# False

If your path ends in a directory, the return value is False.

How to Check if a File Exists Using the os.path.exists() Method in Python

The general syntax for the exists() method looks like this:

os.path.exists(path)

As you can see from the syntax above, the exists() method looks similar to the isfile() method.

The os.path.exists() method checks to see whether the specified path exists.

The main difference between exists() and isfile() is that exists() will return True if the given path to a folder or a file exists, whereas isfile() returns True only if the given path is a path to a file and not a folder.

Keep in mind that if you don’t have access and permissions to the directory, exists() will return False even if the path exists.

Let’s go back to the example from the previous section and check whether the example.txt file exists in the current working directory using the exists() method:

import os.path

path = './example.txt'

check_file = os.path.exists(path)

print(check_file)

# output

# True

Since the path to example.txt exists, the output is True.

As mentioned earlier, the exists() method checks to see if the path to a directory is valid.

In the previous section, when I used the isfile() method and the path pointed to a directory, the output was False even though that directory existed.

When using the exists() method, if the path to a directory exists, the output will be True:

import os.path

path = '/Users/dionysialemonaki/python_project'

check_file = os.path.exists(path)

print(check_file)

# output

# True

The exists() method comes in handy when you want to check whether a file or directory exists.

How to Check if a File Exists Using the pathlib Module

Python 3.4 version introduced the pathlib module.

Using the pathlib module to check whether a file exists or not is an object-oriented approach to working with filesystem paths.

Like the os.path module from earlier on, you need to import the pathlib module.

Specifically, you need to import the Path class from the pathlib module like so:

from pathlib import Path

Then, create a new instance of the Path class and initialize it with the file path you want to check:

from pathlib import Path

# create a Path object with the path to the file
path = Path('./example.txt')

You can use the type() function to check the data type:

from pathlib import Path

path = Path('./example.txt')

print(type(path))

# output is a pathlib object
# <class 'pathlib.PosixPath'>

This confirms that you created a Path object.

Let’s see how to use the pathlib module to check if a file exists using the is_file() method, one of the built-in methods available with the pathlib module.

How to Check if a File Exists Using the Path.is_file() Method in Python

The is_file() method checks if a file exists.

It returns True if the Path object points to a file and False if the file doesn’t exist.

Let’s see an example of how it works:

from pathlib import Path

# create a Path object with the path to the file
path = Path('./example.txt')

print(path.is_file())

# output

# True

Since the example.txt file exists in the specified path, the is_file() method returns True.

Conclusion

In this article, you learned how to check if a file exists in Python using the os.path and pathlib modules and their associated methods.

Hopefully, you have understood the differences between the modules and when to use each one.

Thank you for reading, and happy coding!



Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

  • Ошибка отсутствие зажигания baxi
  • Ошибка отрыв пламени на котле аристон
  • Ошибка отрыв пламени котел аристон устранение
  • Ошибка отрисовки при печати pdf
  • Ошибка отрезчика ритейл 01ф