Python Pickle 文件被无误删除

Python Pickle file gets erased without error

我有 3 个 pickle 文件,分别通过 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)

问题是您正在为空对象编写 pickle 文件,但您使用追加保存新数据。因此,当您加载 pickle 文件时,它会加载第一个 pickle 转储,它恰好是之前保存的空数据,而忽略了同一文件前面包含更多 pickle 转储的事实。

简而言之,如果我是正确的,只需在 save 函数中使用 'wb' 而不是 'ab' 就可以解决您的问题。