从通过pickle保存和加载的元组中获取整数

0 投票
2 回答
1503 浏览
提问于 2025-04-17 02:40

在Python中,我做了一个模块,用来保存和加载整数。它能按照我想要的方式保存数据(我使用的是Pickle),但是当我加载数据时,我得到的是元组形式的整数(因为我保存时用了元组)。我想把这个元组里的元素分配给我程序中的整数,但这不太顺利,请帮帮我!这是我的代码:

def save(ob1,ob2,ob3,ob4,ob5):
    import pickle
    tmp = ob1,ob2,ob3,ob4,ob5
    output = open('save.sav','w')
    pickle.dump(tmp,output)
    output.close()

def load(ob1,ob2,ob3,ob4,ob5):
    import pickle
    input2 = open('save.sav','r')
    pickleload = pickle.load(input2)
    ob1 = pickleload[0]
    ob2 = pickleload[1]
    ob3 = pickleload[2]
    ob4 = pickleload[3]
    ob5 = pickleload[4]

我试着按照aix说的去做,但没有成功。我可能把他的代码放错地方了,或者其他什么原因。aix,你能不能再解释得清楚一点,或者把我的代码编辑一下再发过来?或者其他人能帮帮我吗?

2 个回答

0

下面这段Python代码应该对你有帮助。变量ob1到ob5的值是通过运行pickle.load(open('save.sav', 'r'))得到的。因为这些变量被声明为全局变量,所以你可以在def load():这个函数外部访问它们。

import pickle
def load():
    global ob1, ob2, ob3, ob4, ob5
    ob1, ob2, ob3, ob4, ob5 = pickle.load(open('save.sav', 'r'))
1

load()改成这样:

def load():
    import pickle
    input2 = open('save.sav','r')
    return pickle.load(input2)

然后可以这样使用:

ob1, ob2, ob3, ob4, ob5 = load()

你最开始的版本不管用,是因为当你在函数里面写ob1 = ...时,这个变化不会传递给调用这个函数的地方。当函数返回时,ob1是一个不可变的对象,它是通过引用传递的;给它赋值其实是重新绑定了这个引用,但新的引用不会传回给调用者。

撰写回答