无法加载pickle文件

时间:2016-09-20 20:06:40

标签: python pickle

我以前能够加载一个pickle文件。我用不同的名字保存了一个新文件。我无法加载旧文件或新文件。这是一个无赖,因为它包含我努力磨砂的数据。

以下是我用来保存的代码:

def pickleStore():
    pickle.dump(store, open("...shelf3.p", "wb"))

以下是我用来重新加载的代码:

def pickleLoad():
    store = pickle.load(open(".../shelf3.p","rb" ) )

创建的文件存在,我运行pickleLoad()没有出现错误,面板变量资源管理器中也没有显示任何变量。如果我尝试加载不存在的文件,我会收到一条错误消息。

我正在运行spyder,python 3.5。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果要从函数写入模块级变量,则需要使用global关键字:

store = None

def pickleLoad():
    global store
    store = pickle.load(open(".../shelf3.p","rb" ) )

...或返回值并从模块级代码执行赋值:

store = None

def pickleLoad():
    return pickle.load(open(".../shelf3.p","rb" ) )

store = pickleLoad()

答案 1 :(得分:1)

作为一种通用且更通用的方法,我建议这样的事情:

def load(file_name):
    with open(simulation, 'rb') as pickle_file:
        return pickle.load(pickle_file)

def save(file_name, data):
    with open(file_name, 'wb') as f:
        pickle.dump(data, f)

我已将此代码段添加到多个项目中,以减少多次重写相同的代码。