Помнишь, в угадайке я честно предупредил: память бота живёт, только пока запущена программа. Перезапустил, и все словари снова пустые. Для игры терпимо, а для нормального бота беда. Назвал боту имя, перезапустил, а он снова «здравствуйте, как вас зовут?». Раздражает.
После урока сможешь: объяснить тему «Бот всё забывает: сохраняем в файл» и выполнить связанный с ней учебный шаг без подсказки.
Сегодня учимся это чинить. Бот будет сохранять данные на диск, в файл, чтобы помнить даже после перезапуска.
Почему память пропадает
Словарь живёт в оперативной памяти. Это как мысли в голове: пока думаешь, они есть, заснул и забыл. Программа закрылась, память очистилась, словарь пропал. Чтобы данные пережили перезапуск, их надо записать на диск. Диск это как тетрадка: что записал, то останется.
Файл 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 открыт в редакторе, данные видны текстом.
