Открытие файлов: функция open() и режимы
Функция open() в Python: как открывать файлы, режимы r, w, a, b и почему важно закрывать файл.
open(path, mode) — встроенная функция, которая открывает файл и возвращает файловый объект. Всё, что мы читаем или пишем, проходит через этот объект.
Сигнатура
f = open("имя_файла.txt", "режим", encoding="utf-8")
Параметр encoding почти всегда стоит указывать явно — это избавляет от сюрпризов на разных операционных системах.
Режимы доступа
Режим | Значение | Файл существует? |
| чтение (по умолчанию) | да — иначе ошибка |
| запись (перезапись) | создаётся или очищается |
| добавление в конец | создаётся, если нет |
| чтение и запись | должен существовать |
| бинарный режим (добавляется к другим) | — |
Открыть и закрыть вручную
# Запись в файл
f = open("hello.txt", "w", encoding="utf-8")
f.write("Привет, Python!\n")
f.close() # обязательно! иначе данные могут не сохраниться
# Чтение из файла
f = open("hello.txt", "r", encoding="utf-8")
content = f.read()
f.close()
print(content)
Вывод:
Привет, Python!
Если забыть вызвать
close(), файл останется заблокированным, а буфер может не сбросить данные на диск. Поэтому на практике всегда используют менеджерwith— он закрывает файл автоматически (об этом следующая статья).
Режим «a» — добавление
f = open("log.txt", "a", encoding="utf-8")
f.write("Строка 1\n")
f.close()
f = open("log.txt", "a", encoding="utf-8")
f.write("Строка 2\n")
f.close()
f = open("log.txt", "r", encoding="utf-8")
print(f.read())
f.close()
Вывод:
Строка 1 Строка 2
В отличие от "w", режим "a" не стирает старое содержимое — каждый раз дописывает в конец. Это удобно для журналов (логов).
Бинарный режим
Добавьте букву b к режиму, чтобы работать с байтами, а не текстом:
f = open("image.png", "rb") # читаем PNG как байты
data = f.read()
f.close()
print(type(data)) # <class 'bytes'>
print(len(data), "байт")
Бинарный режим нужен для картинок, архивов, PDF и любых не-текстовых файлов.
Коротко
open(path, mode, encoding)открывает файл и возвращает файловый объект.- Режимы:
"r"— чтение,"w"— запись (перезапись),"a"— добавление,"b"— байты. - Всегда указывайте
encoding="utf-8"для текстовых файлов. - После работы файл нужно закрыть через
close()— или использоватьwith.
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.