Python pickle不保存数据?

时间:2017-03-01 05:00:59

标签: python pickle

我刚刚了解了泡菜库,所以我一直在努力学习如何使用它。但我遇到了一个问题。我要做的是保存(pickle)一个字典,该字典有一个包含2d列表(网格)的对象。但是当我更改座位的一个值时,pickle似乎没有保存。这是一些代码

#Save movie data
def saveData():
    pickle.dump(movieInfo, open("save.p", "wb"))

#load movie data
def loadData():
    movieInfo = pickle.load(open("save.p", "rb"))

class seats:
    def __init__(self):
        self.seating = []
        for i in range(0,10):
            self.seating.append(
                [False,False,False,False,False,False,False,False,False,False]
            )

loadData()
input("continue...")
chooseMovie()

任何帮助将不胜感激!谢谢。

2 个答案:

答案 0 :(得分:1)

您将pickle文件加载到movieInfo,这是一个函数本地的变量,一旦函数loadData()退出,您将失去对它的引用。

如果它是全球性的,你应该声明它:

#load movie data
def loadData():
    global movieInfo
    movieInfo = pickle.load(open("save.p", "rb"))

但是,使用全局变量通常是一种不好的做法,相反,从函数返回加载的对象并在那里使用它会更好:

#load movie data
def loadData():
    return pickle.load(open("save.p", "rb"))

# ...
moveInfo = loadData()
# ...

答案 1 :(得分:0)

完成后,您必须关闭文件。修改您的代码如下:

def saveData():
    with open("save.p", "wb") as pickleFile:
        pickle.dump(movieInfo, pickleFile)

def loadData():
    with open("save.p", "rb") as pickleFile:
        movieInfo = pickle.load(pickleFile)