@padeke

Как сохранять процесс обработки данных словаря в python?

Помогите пожалуйста решить проблему.

У меня есть словарь, где ключ - это название фильма и его год, а значение - краткое описание. В этом словаре находится около 35к ключей и значений.

Мне нужно было написать код, который берет рандомный ключ из словаря и его значение и предлагает пользователю, если пользователь отметит его как "Смотрел", название фильма(ключ), записывается в текстовый файл, а из словаря удаляется, если пользователь отмети его как "Не смотрел", никаких изменений не вносится.

Суть проблемы в том, что данные не сохраняются после завершении цикла, отмеченные фильмы "Смотрел", из словаря не удаляются, а если запустить цикл повторно, файл в котором хранятся просмотренные фильмы перезаписывается .
import random
from all_films import films
def gofilm():
    with open('iwatch.txt', 'w', encoding='utf-8') as f: 
        num = 1
        while num == 1:
            random_film_key = random.choice(list(films))
            film_value = films.get(random_film_key).replace(',', '\n')
            print("Фильм: " + random_film_key, "Описание фильма: " + film_value, sep='\n')
            question = int(input("Ты смотрел этот фильм?  да - 1, нет - 0 \n"))


            if question == 1:

                f.write(random_film_key + '\n')
                del films[random_film_key]
            elif question == 0:
                continue
            else:
                num = 0

gofilm()
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
а если запустить цикл повторно, файл в котором хранятся просмотренные фильмы перезаписывается

Вы перезаписываете весь файл целиком каждый раз:
with open('iwatch.txt', 'w', encoding='utf-8') as f:

Предположу, что Вы хотите писать новые данные в конец файла:
with open('iwatch.txt', 'a', encoding='utf-8') as f:

Полный код:
import random
import json

# file
try:
    with open('films.json', 'r', encoding='utf-8') as f:
        films = json.load(f)
except FileNotFoundError:
    films = {}

# save
def save(films):
    with open('films.json', 'w', encoding='utf-8') as f:
        json.dump(films, f, ensure_ascii=False, indent=4)

# main
def main():
    while True:
        random_film_key = random.choice(list(films))
        film_value = films.get(random_film_key).replace(',', '\n')
        print("Фильм: " + random_film_key, "Описание фильма: " + film_value, sep='\n')

        # а где вариант 3 (ya est' Grut)?
        q = input("Ты смотрел этот фильм? да - 1, нет - 0, выход - любая другая клавиша \n")

        if q == '1':
            with open('iwatch.txt', 'a', encoding='utf-8') as f:
                f.write(random_film_key + '\n')
            del films[random_film_key]
            save(films)
        elif q == '0':
            continue
        else:
            break

# run
main()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы