Бот всё забывает: сохраняем в файл

Помнишь, в угадайке я честно предупредил: память бота живёт, только пока запущена программа. Перезапустил, и все словари снова пустые. Для игры терпимо, а для нормального бота беда. Назвал боту имя, перезапустил, а он снова «здравствуйте, как вас зовут?». Раздражает.

После урока сможешь: объяснить тему «Бот всё забывает: сохраняем в файл» и выполнить связанный с ней учебный шаг без подсказки.

Сегодня учимся это чинить. Бот будет сохранять данные на диск, в файл, чтобы помнить даже после перезапуска.

Почему память пропадает

Словарь живёт в оперативной памяти. Это как мысли в голове: пока думаешь, они есть, заснул и забыл. Программа закрылась, память очистилась, словарь пропал. Чтобы данные пережили перезапуск, их надо записать на диск. Диск это как тетрадка: что записал, то останется.

Файл JSON

Удобнее всего складывать словари и списки в формат под названием JSON. В Python для него есть готовый модуль json, подключаем сверху: import json. Сохранить словарь в файл это две строчки:

import json

dannye = {"Аня": 5, "Петя": 3}

with open("dannye.json", "w", encoding="utf-8") as f:
    json.dump(dannye, f, ensure_ascii=False)
  • open("dannye.json", "w", ...) открывает файл на запись. Буква w это write, «писать». Нет файла — создастся.
  • with ... as f: аккуратный способ работать с файлом: он сам закроется, когда закончим.
  • json.dump(dannye, f, ensure_ascii=False) записывает словарь в файл. ensure_ascii=False нужен, чтобы русские буквы сохранились буквами, а не кракозябрами.

Читаем обратно

with open("dannye.json", encoding="utf-8") as f:
    snova = json.load(f)

print(snova)

json.load(f) читает файл и превращает обратно в словарь. Теперь snova это тот же словарь, что мы сохраняли. Открой файл dannye.json в редакторе, и увидишь свои данные прямо текстом. Это и есть тетрадка бота.

При самом первом запуске файла ещё нет, читать нечего. Python ругнётся ошибкой FileNotFoundError. Это не поломка: бот просто ещё ничего не записал. Поймаем её и начнём с пустого словаря, как именно — в следующем уроке.

Контрольный вопрос. Какой функцией модуля json записывают словарь в файл? Напиши имя: json.____(dannye, f).

Подсказка: dump — записать в файл; load — прочитать.

Онлайн-проверка ответа появится позже

Задание. Сделай словарь с парой записей, сохрани его в файл через json.dump, прочитай обратно через json.load и напечатай. Открой получившийся .json файл в редакторе и посмотри, как лежат данные.

Подсказка: Запись: open(…, «w») + json.dump. Чтение: open(…) + json.load. Не забудь encoding=»utf-8″ и ensure_ascii=False при записи.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Зачёт, если:
✅ словарь сохраняется в .json через json.dump и читается обратно через json.load тем же словарём;
✅ файл .json открыт в редакторе, данные видны текстом.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева