正确地序列化和反序列化字典

1 投票
1 回答
974 浏览
提问于 2025-04-18 04:22

我刚开始使用Python 3.4.0中的Pickle模块,想把它应用到一个简单的程序中,这个程序处理类别和单词。目前为止,它能按计划存储所有内容,但当我尝试从文件中加载之前保存的数据时,结构似乎是空的:

new_data = int(input("New Data File?\n 1 = Yes\n 0 = No\nChoice: "))
if (new_data == 1):
   f = open('data.txt', 'wb+')
   data_d = {}
   pickle.dump(data_d, f)
   f.close()

PrMenu()
option = int(input("Option: "))
f = open('data.txt', 'rb+')        
d = pickle.load(f)
#Functions inside this menu loop receive the structure (Dictionary)
#and modify it accordingly (add/modify/clear category/word), no
#pickling/unpickling is involved
while (option != 0):
   if (option == 1):
      add_c(d)
   elif (option == 2):
      modify_c(d)
   elif (option == 3):
      clear_c(d)
   elif (option == 4):
      add_w(d)
   elif (option == 5):
      modify_w(d)
   elif (option == 6):
      clear_w(d)
   elif (option == 7):
      pr_cw(d)
   elif (option == 8):
      pr_random(d)

   if (option != 0):
      PrMenu()
      option = int(input("Option: "))


#the output structure would be eg. {category_a:[word1, word2, word3, ...], category_b:[..., ...]}
pickle.dump(d, f)
f.close()
print("End of Program")

我不太确定问题出在哪里,希望我说得够清楚。

谢谢。

1 个回答

1

你正在往文件里添加数据。第一次你读取的是一个空的字典,第二次读取的是一个已经填满的字典,而这个填满的字典你之后就没有再读取过。你在写入之前需要把位置移动回文件的开头。

撰写回答