Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正确地酸洗和拆开字典_Python_Pickle - Fatal编程技术网

Python 正确地酸洗和拆开字典

Python 正确地酸洗和拆开字典,python,pickle,Python,Pickle,我刚刚开始使用Python3.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_

我刚刚开始使用Python3.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")
我不确定问题在哪里,我希望我已经足够清楚了


谢谢。

您正在向文件中添加数据。因此,第一个数据集是空字典,您在其中读取,第二个数据集是填充字典,您再也不会读取。您必须在写入之前返回0。

很抱歉问这个问题,但是为什么你要使用
pickle
而不是像JSON这样更现代的/可移植的/人类可读的格式?或者甚至是
shelve
来处理看起来像dict的东西,但实际上是在幕后序列化的。我读到有更好的方法来处理这种情况,但是我在大学的Python课上被要求使用Pickle。我会远离
搁置
模块和
json
。两者都是非常有限的解决方案。Pickle提供了一种扩展自身的简单方法,因此,如果您足够持久,可以扩展它来序列化整个python语言。那为什么要用泡菜呢?如果要创建一组更健壮的序列化对象,可以进行pickle。有关扩展pickle以序列化python中几乎所有内容的示例,请参阅。如果你想要一个更好的架子,那就看看吧。此外,作者被pickle困住了,所以pickle就是。