Чтение и запись текстовых файлов

Чтение и запись текстовых файлов

До сих пор программы «забывали» все данные при завершении. Чтобы сохранить результат между запусками, нужны файлы. Python предоставляет простой встроенный API для работы с текстовыми файлами — без сторонних библиотек.

Открытие файла: open()

Функция open() открывает файл и возвращает файловый объект:

f = open("notes.txt", "w", encoding="utf-8")
f.write("Привет, файл!")
f.close()

Параметры open():

  • первый аргумент — путь к файлу
  • второй — режим: "r" (чтение), "w" (запись, перезаписывает), "a" (дозапись), "x" (создание, ошибка если существует)
  • encoding — кодировка; всегда указывайте "utf-8" явно

Режимы открытия

РежимОписание
"r"Чтение (по умолчанию). Ошибка если файл не существует
"w"Запись. Создаёт файл или перезаписывает существующий
"a"Дозапись в конец. Создаёт если не существует
"x"Создание нового. FileExistsError если уже есть
"r+"Чтение и запись

Запись в файл

f = open("output.txt", "w", encoding="utf-8")
f.write("Первая строка\n")
f.write("Вторая строка\n")
f.close()   # ВАЖНО: закрыть файл

Вызов close() обязателен — он сбрасывает буфер на диск. Если забыть, данные могут не записаться. Для нескольких строк удобнее writelines():

lines = ["строка 1\n", "строка 2\n", "строка 3\n"]
f = open("output.txt", "w", encoding="utf-8")
f.writelines(lines)
f.close()

Чтение из файла

Три способа прочитать содержимое:

f = open("output.txt", "r", encoding="utf-8")

# read() — весь файл как одна строка:
content = f.read()
print(content)
f.close()

f = open("output.txt", "r", encoding="utf-8")
# readline() — одну строку за раз:
line1 = f.readline()
line2 = f.readline()
f.close()

f = open("output.txt", "r", encoding="utf-8")
# readlines() — список всех строк (со \n):
lines = f.readlines()
for line in lines:
    print(line.strip())   # strip() убирает \n
f.close()

Для большинства задач удобнее всего итерировать файловый объект напрямую — построчно, без загрузки всего файла в память:

f = open("big_file.txt", "r", encoding="utf-8")
for line in f:
    process(line.strip())
f.close()

Дозапись: режим "a"

f = open("log.txt", "a", encoding="utf-8")
f.write("Новая запись\n")
f.close()

Режим "a" не стирает существующее содержимое — добавляет в конец. Полезен для логов и накопления данных.

Опасность забытого close()

Если программа завершится с ошибкой между open() и close(), файл может не закрыться — данные потеряются, а ресурсы ОС не освободятся. Решение — with open(...), которое гарантирует закрытие в любом случае. Подробно об этом — в следующем уроке.

Проверь себя

Какой режим открытия нужен, чтобы прочитать файл и получить ошибку, если файл не существует?

Режим "r" (по умолчанию) — открывает для чтения и выбрасывает FileNotFoundError, если файл не существует.

Итог

  • open(path, mode, encoding="utf-8") — открыть файл; всегда указывайте encoding.
  • Режимы: "r" — чтение, "w" — запись (перезаписывает), "a" — дозапись.
  • f.read() — всё; f.readline() — строка; f.readlines() — список строк; итерация по f — построчно.
  • f.write(text) — записать строку; f.writelines(list) — список строк.
  • f.close() обязателен — или используйте with open(...) (следующий урок).

В следующем уроке изучим контекстный менеджер with open — более безопасный и удобный способ работы с файлами.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике