2011-09-20 55 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')) 
相關問題