Открытие файлов: функция open() и режимы

Функция open() в Python: как открывать файлы, режимы r, w, a, b и почему важно закрывать файл.

open(path, mode) — встроенная функция, которая открывает файл и возвращает файловый объект. Всё, что мы читаем или пишем, проходит через этот объект.

Сигнатура

f = open("имя_файла.txt", "режим", encoding="utf-8")

Параметр encoding почти всегда стоит указывать явно — это избавляет от сюрпризов на разных операционных системах.

Режимы доступа

Режим

Значение

Файл существует?

"r"

чтение (по умолчанию)

да — иначе ошибка

"w"

запись (перезапись)

создаётся или очищается

"a"

добавление в конец

создаётся, если нет

"r+"

чтение и запись

должен существовать

"b"

бинарный режим (добавляется к другим)

Открыть и закрыть вручную

# Запись в файл
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.
Проверьте себя
1. В каком режиме open() файл будет создан (или очищен), если он уже существует?
A"r"
B"a"
C"w"
D"rb"
2. Зачем указывать encoding="utf-8" при открытии текстового файла?
AЧтобы файл открылся быстрее
BЧтобы избежать ошибок кодировки на разных ОС
CЭто обязательный параметр без которого open() не работает
DЧтобы включить бинарный режим
3. Какой режим нужно использовать для записи данных в конец уже существующего файла?
A"w"
B"r+"
C"a"
D"wb"
4. Что произойдёт, если открыть несуществующий файл в режиме "r"?
AФайл будет создан автоматически
BPython вернёт пустую строку
CВозникнет ошибка FileNotFoundError
DФайл откроется в режиме "w"

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект