2013-07-02 58 views
0

我在恢復從Python字典中的姿勢有一些問題。我剛剛創建了一個包含對象數據的字典,並將這個字典保存在一個pickle文件中。從一個泡菜文件,在Python中恢復數據

現在我想抓取這個pickle文件中的所有數據並將其恢復到另一個對象。 你能告訴我什麼是最好的方法?

這是我save_pose功能:

def save_pose() : 

    output = open('pose_dictionary.pkl', 'wb') 
    pickle.dump(grab_pose(cmds.ls(selection=1), True), output) 
    output.close() 

    dict_file = open('pose_dictionary.pkl', 'rb')   
    dict_pkld = pickle.load(dict_file) 
    dict_file.close() 


    print dict_pkld 

我只是保存在一個泡菜文件一本字典,所以當打印的dict_pkld它返回

{u'left_pCube1_control': {u'translateX': {'value': 0.0, 'key': False}, u'translateY': {'value': 0.0, 'key': False}, u'translateZ': {'value': 0.0, 'key': False}, u'scaleX': {'value': 4.1730065104412066, 'key': {'outTangent': u'auto', 'inTangent': u'auto', 'inAngle': 0.0, 'outAngle': 0.0}}, u'scaleY': {'value': 4.1730065104412066, 'key': {'outTangent': u'auto', 'inTangent': u'auto', 'inAngle': 0.0, 'outAngle': 0.0}}, u'visibility': {'value': True, 'key': False}, u'rotateX': {'value': 0.0, 'key': False}, u'rotateY': {'value': 0.0, 'key': False}, u'rotateZ': {'value': 0.0, 'key': False}, u'scaleZ': {'value': 4.1730065104412066, 'key': {'outTangent': u'auto', 'inTangent': u'auto', 'inAngle': 0.0, 'outAngle': 0.0}}} 

我現在想恢復這些數據這個文件給一個對象。

+0

這僅僅是一個測試函數,來驗證'grab_pose()'返回的結果是否等於你在最後得到的'dict_pkld'?他們是不是等同的問題?如果是這樣,你能給我們一些樣本數據(最好只是一個字典,所以我們甚至不需要'grab_pose')來測試它? – abarnert

+0

'dict_pkld'包含你想要的數據。你的問題很不明確。 – Elazar

+0

是的,它包含的數據,但我不知道如何我可以恢復到其他對象 – user2375723

回答

-1

Docs on pickle.load

閱讀從打開的文件對象文件中的字符串,並把它解釋爲一個泡菜數據流,重建和恢復原始對象的層次結構。

在你的函數中,你既保存又恢復對象。你應該拆分這些操作(和使用with):

filename = 'pose_dictionary.pkl' 

def save_pose(data): 
    with open(filename , 'wb') as output: 
     pickle.dump(data, output) 

def restore_pose(): 
    with open(filename , 'rb') as dict_file: 
     return pickle.load(dict_file) 

data = grab_pose(cmds.ls(selection=1), True) #assumption, based on your code 
save_pose(data) 
#... 
data = restore_pose() 
+0

我不知道我的答案有什麼問題。 – Elazar

0

我遇到一些問題,在 從字典恢復姿勢的Python

什麼問題,究竟...如果我不得不猜測我會說你的grab_pose函數有問題。

當我運行以下腳本時,我不會收到任何錯誤。

import pickle 

output = open('pose_dictionary.pkl', 'wb') 
pickle.dump({"test":1}, output) 
output.close() 

dict_file = open('pose_dictionary.pkl', 'rb')   
dict_pkld = pickle.load(dict_file) 
dict_file.close() 

print dict_pkld 
+0

您是否可以使用該註釋更新您的問題以及要還原的對象的代碼?我想你可以將dict傳遞給該對象(假設該對象在init聲明中使用了kwargs)。 – John