2016-02-27 45 views
0

我是一名GCSE学生,并且设置了一个问题,需要我保存学生名称和测试分数以供日后检索和操作。我想从一个pickled dat文件加载一本字典,但问题是,我第一次尝试加载它时,pickle字典不存在

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

我只有在第一次运行程序时出现问题,因为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文件是否先存在?

如果你能帮忙,请保持​​简单,因为我的知识是有限的。

+0

先运行'f.seek(0)'。 – zondo

回答

0

发生这种情况的原因是因为您的pickle文件中没有数据以开始。您需要运行检查以查看是否有要加载的数据。所以,你可以尝试抛出你的代码,除了检查你是否可以加载数据。如果你不能,将初始数据(空数据)写入pickle文件。

此外,请注意明确设置读取和写入文件。

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,转储空的数据。所以下次你进来时,它会成功加载,你可以写你的数据,然后转储咸菜。

+0

它不会给出'IOError';它会给出'EOFError'。我认为问题在于他用“a”打开文件,并没有寻求开始。 – zondo

+0

idjaw会在哪里我从os.path中进口isfile对 键入 会是在程序的类似 进口泡菜 是它调用一个函数开始? – PythonNewb

+0

@PythonNewb进行了更新。再看看解决方案。 – idjaw

相关问题