Как сохранить прогресс обработки данных словаря в Python, чтобы можно было продолжить с места остановки?

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

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

```python
import random
import json

def gofilm():
    try:
        with open('iwatch.txt', 'r') as f:
            watched_films = json.load(f)
    except FileNotFoundError:
        watched_films = []

    with open('iwatch.txt', 'a') as f:
        while True:
            random_film_key = random.choice(list(films))
            film_value = films[random_film_key].replace(',', '\n')
            print("Фильм: " + random_film_key, "Описание фильма: " + film_value, sep='\n')
            question = input("Ты смотрел этот фильм? да - 1, нет - 0\n")

            if question == '1':
                f.write(random_film_key + '\n')
                films.pop(random_film_key)
                watched_films.append(random_film_key)
            elif question == '0':
                continue
            else:
                break

    with open('iwatch.txt', 'w') as f:
        json.dump(watched_films, f)

gofilm()
```
  • 7 ноября 2023 г. 9:49
Ответы на вопрос 2
Для сохранения прогресса обработки данных словаря и возможности продолжить с места остановки вам нужно сохранить текущее состояние словаря `films` в файл. Затем, при следующем запуске программы, вы должны загрузить это состояние и продолжить выполнение программы с сохраненного места.

Вот пример, как это можно сделать:

```python
import random
import json

def gofilm():
    try:
        with open('iwatch.txt', 'r') as f:
            watched_films = json.load(f)
    except FileNotFoundError:
        watched_films = []

    try:
        with open('films.txt', 'r') as f:
            films = json.load(f)
    except FileNotFoundError:
        films = {"Фильм1": "Описание1", "Фильм2": "Описание2", "Фильм3": "Описание3"}
        with open('films.txt', 'w') as f:
            json.dump(films, f)

    with open('iwatch.txt', 'a') as f:
        while films:
            random_film_key = random.choice(list(films))
            film_value = films[random_film_key].replace(',', '\n')
            print("Фильм: " + random_film_key, "Описание фильма: " + film_value, sep='\n')
            question = input("Ты смотрел этот фильм? да - 1, нет - 0\n")

            if question == '1':
                f.write(random_film_key + '\n')
                films.pop(random_film_key)
                watched_films.append(random_film_key)
            elif question == '0':
                continue
            else:
                break

    with open('iwatch.txt', 'w') as f:
        json.dump(watched_films, f)

    with open('films.txt', 'w') as f:
        json.dump(films, f)

gofilm()
```

В этом примере я добавил сохранение состояния словаря `films` в файл `films.txt`. При каждом запуске программы, она будет загружать состояние словаря из этого файла. Если файл не существует, то создается новый словарь с начальными значениями.
вместо перезаписи файла с просмотренными фильмами при повторном запуске цикла, можно добавлять новые данные в конец файла. Для этого измените режим открытия файла на 'a' вместо 'w':
with open('iwatch.txt', 'a', encoding='utf-8') as f:
Похожие вопросы