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' 就可以解决您的问题。
我有 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' 就可以解决您的问题。