2013-07-02 1 views
0

У меня возникли проблемы с восстановлением позы из словаря в Python. Я просто создал словарь, который имеет данные от объекта, и я сохранил этот словарь в файле pickle.из файла 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 этому объекту (предполагая, что объект использует kwargs в объявлении init). – John

Смежные вопросы