0

我在从 Python 中的字典中恢复姿势时遇到了一些问题。我刚刚创建了一个包含来自对象的数据的字典,并将该字典保存在一个 pickle 文件中。

现在我想从这个 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}}}

我现在想将这些数据从这个文件恢复到一个对象。

4

2 回答 2

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
于 2013-07-02T21:37:21.760 回答
-1

文档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()
于 2013-07-02T21:34:09.563 回答