【问题标题】:I want to load a dictionary from a pickled dat file but the issue is that the first time I try to load it the pickled dictionary does not exist我想从腌制的 dat 文件中加载字典,但问题是我第一次尝试加载它时腌制的字典不存在
【发布时间】:2016-02-27 19:08:15
【问题描述】:

我是一名 GCSE 学生,遇到了一个问题,要求我将学生姓名和考试成绩保存到文件中,以便以后检索和处理。

我决定将数据存储在字典中,我将根据需要对其进行腌制和检索。我知道如何腌制字典并检索以前腌制过的字典。

我的问题只在程序第一次运行时出现,因为尚未创建 dat 文件。

下面的代码打开现有的 Dat 文件,并将最新的学生姓名和分数写入文件中保存的字典。

f = open("class1.dat","ab+")
class1 = pickle.load(f)
class1[Name]=Score
pickle.dump(class1,f)
f.close

问题在于,一旦将第一个分数保存到 Dat 文件中,它就可以工作,但我在第一次运行程序时收到此错误消息。

Traceback (most recent call last):
  File "C:\Python34\Latest_Version.py", line 61, in <module>
    class1 = pickle.load(f)
EOFError: Ran out of input

我意识到这是因为 dat 文件还不存在。

什么代码会先检查 Dat 文件是否存在?

如果您能提供帮助,请保持简单,因为我的知识有限。

【问题讨论】:

  • 先运行f.seek(0)

标签: python dictionary pickle


【解决方案1】:

发生这种情况的原因是您的 pickle 文件中没有数据可供开始使用。您需要运行检查以查看是否有要加载的数据开始。因此,您可以将代码放入 try/except 以检查是否可以加载数据。如果不能,将初始数据(空数据)写入泡菜文件。

另外,注意显式设置文件的读写。

import pickle

class1 = {}
try:
    class1 = pickle.load(open("my_stuff.pkl", "rb"))
    print(class1)
    class1['bob'] = 123
    pickle.dump(class1, open("my_stuff.pkl", "wb"))
except:
    pickle.dump(class1, open("my_stuff.pkl", "wb"))

所以,这里发生的情况是,您首先声明一个空字典,然后尝试加载内容。如果失败,就会落入except,转储空数据。所以下次你进来的时候,它就会加载成功,你可以写你的数据,然后转储pickle。

【讨论】:

  • 它没有给出IOError;它给出了EOFError。我相信问题是他用'a'打开文件,并没有寻找到开头。
  • @PythonNewb 进行了更新。再看看解决方案。
  • @PythonNewb 我的新解决方案不需要这样。我更新了我的解决方案。刷新您的页面。
  • @PythonNewb 进行了另一项更改。此解决方案有效。你需要明确你的阅读和写作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多