Открытие и закрытие файлов
Python поддерживает множество различных типов файлов, но условно их можно разделить на два виде: текстовые и бинарные. Текстовые файлы – это к примеру файлы с расширением cvs, txt, html, в общем любые файлы, которые сохраняют информацию в текстовом виде. Бинарные файлы – это изображения, аудио и видеофайлы и т.д. В зависимости от типа файла работа с ним может немного отличаться.
При работе с файлами необходимо соблюдать некоторую последовательность операций:
- Открытие файла с помощью метода open()
- Чтение файла с помощью метода read() или запись в файл посредством метода write()
- Закрытие файла методом close()
Открытие и закрытие файла
Чтобы начать работу с файлом, его надо открыть с помощью функции open(), которая имеет следующее формальное определение:
| 1 | open(file, mode) |
Первый параметр функции представляет путь к файлу. Путь файла может быть абсолютным, то есть начинаться с буквы диска, например, C://somedir/somefile.txt. Либо можно быть относительным, например, somedir/somefile.txt – в этом случае поиск файла будет идти относительно расположения запущенного скрипта Python.
Второй передаваемый аргумент – mode устанавливает режим открытия файла в зависимости от того, что мы собираемся с ним делать. Существует 4 общих режима:
- r (Read). Файл открывается для чтения. Если файл не найден, то генерируется исключение FileNotFoundError
- w (Write). Файл открывается для записи. Если файл отсутствует, то он создается. Если подобный файл уже есть, то он создается заново, и соответственно старые данные в нем стираются.
- a (Append). Файл открывается для дозаписи. Если файл отсутствует, то он создается. Если подобный файл уже есть, то данные записываются в его конец.
- b (Binary). Используется для работы с бинарными файлами. Применяется вместе с другими режимами – w или r.
После завершения работы с файлом его обязательно нужно закрыть методом close(). Данный метод освободит все связанные с файлом используемые ресурсы.
Например, откроем для записи текстовый файл “hello.txt”:
| 1 2 3 | myfile = open("hello.txt", "w")myfile.close() |
При открытии файла или в процессе работы с ним мы можем столкнуться с различными исключениями, например, к нему нет доступа и т.д. В этом случае программа выпадет в ошибку, а ее выполнение не дойдет до вызова метода close, и соответственно файл не будет закрыт.
В этом случае мы можем обрабатывать исключения:
| 1 2 3 4 5 6 7 8 9 10 | try:somefile = open("hello.txt", "w")try:somefile.write("hello world")except Exception as e:print(e)finally:somefile.close()except Exception as ex:print(ex) |
В данном случае вся работа с файлом идет во вложенном блоке try. И если вдруг возникнет какое-либо исключение, то в любом случае в блоке finally файл будет закрыт.
Однако есть и более удобная конструкция – конструкция with:
| 1 2 | with open(file, mode) as file_obj:инструкции |
Эта конструкция определяет для открытого файла переменную file_obj и выполняет набор инструкций. После их выполнения файл автоматически закрывается. Даже если при выполнении инструкций в блоке with возникнут какие-либо исключения, то файл все равно закрывается.
Так, перепишем предыдущий пример:
| 1 2 | with open("hello.txt", "w") as somefile:somefile.write("hello world") |