Python Файл рассола удаляется без ошибок - PullRequest
0 голосов
/ 06 августа 2020

У меня есть 3 файла рассола, в которые добавляются данные отдельно через 3 переменные recipeNames = [], ingredients = {}, procedure = {}. Ниже приведен способ проверки существования файла и загрузки данных. Всякий раз, когда я запускаю свою программу, 3 переменные пусты, когда они печатаются после загрузки.

recipeNames = []
ingredients = {}
procedure = {}
# --------------------------------------

if path.exists('RecipeNames.pickle'):
    with open("RecipeNames.pickle", "rb") as r:
        recipeNames = pickle.load(r)
        print(recipeNames)

if not path.exists('RecipeNames.pickle'):
    with open("RecipeNames.pickle", "wb") as r:
        recipeNames = []
        pickle.dump(recipeNames, r)

# ---------------------------------------

if path.exists('Ingredients.pickle'):
    with open("Ingredients.pickle", "rb") as i:
        ingredients = pickle.load(i)
        print(ingredients)

if not path.exists("Ingredients.pickle"):
    with open("Ingredients.pickle", "wb") as i:
        pickle.dump(ingredients, i)

# ---------------------------------------

if path.exists('Procedure.pickle'):
    with open("Procedure.pickle", "rb") as p:
        procedure = pickle.load(p)
        print(procedure)

if not path.exists("Procedure.pickle"):
    with open("Procedure.pickle", "wb") as p:
        pickle.dump(procedure, p)

У меня есть функция, которую я использую для сохранения данных, когда это необходимо, она приведена ниже.

def save():
    with open("RecipeNames.pickle", "ab") as r:
        pickle.dump(recipeNames, r)
    with open("Ingredients.pickle", "ab") as i:
        pickle.dump(ingredients, i)
    with open("Procedure.pickle", "ab") as p:
        pickle.dump(procedure, p)

1 Ответ

2 голосов
/ 06 августа 2020

Проблема в том, что вы пишете файл pickle для пустых объектов, но сохраняете новые данные с помощью добавления. Итак, когда вы загружаете файл pickle, он загружает первый дамп pickle, который оказывается пустыми данными, сохраненными ранее, не обращая внимания на тот факт, что тот же файл содержит больше дампов pickle впереди.

Короче говоря, просто используя 'wb 'вместо' ab 'в вашей функции save должно решить вашу проблему, если я прав.

...