2011-09-20 68 views
0

在Python上,我创建了一个保存和加载整数的模块,它可以大致保存我想要的(我使用Pickle),但是当我加载它时,我收到我的整数元组形式(因为我使它成为一个元组来保存)我想将元组的元素分配给我的程序中的整数,但它不会请大家帮忙!这里是我的代码:从保存的元组中获取整数,然后加载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,但没有奏效。我可能把他的代码放在错误的地方或类似的地方。艾克斯,你能否更好地解释一下,或者转发我的代码,但编辑?或者别人能帮我吗?

+0

您的标题没有提供任何有关您的问题的信息。没有得到回应的另一个大问题是标签 - “保存”和“加载”是完全通用的,并且没有提供有关该问题的信息。查看我添加的标签(特别是“Python”)和我的标题重写,以便如何为潜在的回复者提供有用的信息。 – agf

+0

“但它不”意味着什么?具体发生了什么?你怎么调用'load'或'save'?如果您收到错误,请发布!完整的追溯,不仅仅是'ValueError'或者其他任何类型。 – agf

+0

我没有收到任何错误,只是没有按照我想要的方式工作。 – PythonPowerify

回答

1

变化load()像这样:

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

然后,它可以用来像这样:

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

,因为当你指定ob1 = ...函数内,您的原始版本不工作,改变没有按当函数返回时,不会传播给调用者(ob1是通过引用传递的不可变对象;分配给它重新绑定引用,但新引用不会传回给调用者)。

+0

我之前试过这个,没有工作,不知道我在做什么错?您能否请转发我的代码,但以您的时尚编辑? – PythonPowerify

+0

我还会补充说你应该这样做(尽管在CPython中它并不重要,因为它的refcounting GC),然后在完成时用'input2.close()'关闭文件;这更容易完成,因为使用open('sav.sav')作为f:return pickle.load(f)'。 ('r'是'open()'的默认模式,所以它可以被安全地删除。) –

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')) 
相关问题