with open(...) as f: — контекстный менеджер, авто-закрытие.
f.read(), f.readline(), f.readlines() — чтение.
f.write(text), f.writelines(list) — запись.
encoding="utf-8" — кодировка для текстовых файлов.
Режимы открытия файла
Режим
Что делает
Пример
"r"
Чтение текста. Файл должен существовать.
open("data.txt", "r", encoding="utf-8")
"w"
Запись текста. Создаёт или перезаписывает файл.
open("out.txt", "w", encoding="utf-8")
"a"
Добавление в конец файла.
open("log.txt", "a", encoding="utf-8")
"x"
Создание нового файла. Ошибка, если файл существует.
open("new.txt", "x", encoding="utf-8")
"b"
Бинарный режим. Комбинируется с r/w/a/x.
open("img.jpg", "rb")
"t"
Текстовый режим (по умолчанию).
open("data.txt", "rt", encoding="utf-8")
"r+"
Чтение и запись. Файл должен существовать.
open("data.txt", "r+", encoding="utf-8")
"w+"
Запись и чтение. Перезаписывает файл.
open("data.txt", "w+", encoding="utf-8")
"a+"
Добавление и чтение.
open("log.txt", "a+", encoding="utf-8")
Методы чтения
Метод
Что возвращает
Когда использовать
f.read()
Всё содержимое файла одной строкой.
Файл небольшой, нужен весь текст.
f.read(n)
Первые n символов.
Чтение больших файлов по частям.
f.readline()
Одну строку, включая \n.
Построчная обработка.
f.readlines()
Список строк, включая \n.
Нужен список для дальнейшей обработки.
for line in f:
Строки по одной, лениво.
Большие файлы, экономия памяти.
Методы записи
Метод
Что делает
Примечание
f.write(text)
Записывает строку в файл.
Не добавляет \n автоматически.
f.writelines(lines)
Записывает список строк подряд.
Символы \n должны быть внутри строк.
Конструкция with open(...)
Конструкция
Описание
Пример
with open(...) as f:
Открывает файл и автоматически закрывает его.
with open("a.txt", "r") as f: print(f.read())
with open(...) as f1, open(...) as f2:
Открывает несколько файлов одновременно.
with open("in.txt") as inp, open("out.txt", "w") as out: ...
Распространённые кодировки
Кодировка
Описание
Когда использовать
utf-8
Универсальная кодировка, поддерживает все языки.
По умолчанию в Python 3, рекомендуется всегда.
cp1251
Кодировка Windows для русского языка.
Старые файлы из Windows-программ.
ascii
Только английские символы 0–127.
Устаревшая, почти не используется.
utf-16
Двухбайтовая кодировка.
Некоторые Windows-файлы.
iso-8859-1
Latin-1, западноевропейские языки.
Специфические старые файлы.
Связанные исключения
Исключение
Причина
Что делать
FileNotFoundError
Файл не найден при открытии на чтение.
Проверить путь или обернуть в try/except.
FileExistsError
Файл уже существует при режиме "x".
Проверить имя файла или обработать исключение.
UnicodeDecodeError
Неверная кодировка при чтении.
Указать правильную encoding.
PermissionError
Нет прав на чтение или запись.
Проверить права доступа к файлу.
⚠️ Проверить по документации: исключение PermissionError не упоминается в исходной лекции, но является стандартным исключением Python при работе с файлами.
Частые паттерны
# 1. Прочитать весь файл
with open("data.txt", "r", encoding="utf-8") as file:
text = file.read()
# 2. Прочитать построчно
with open("data.txt", "r", encoding="utf-8") as file:
for line in file:
process(line.strip())
# 3. Записать список строк
lines = ["first\n", "second\n"]
with open("out.txt", "w", encoding="utf-8") as file:
file.writelines(lines)
# 4. Дописать в конец
with open("log.txt", "a", encoding="utf-8") as file:
file.write("new event\n")
# 5. Скопировать файл
with (
open("source.txt", "r", encoding="utf-8") as src,
open("dest.txt", "w", encoding="utf-8") as dst,
):
dst.write(src.read())