"pickle" 如何在 py-mel 上工作?
How "pickle" works on py-mel?
我正在尝试在 Maya 上使用 python 存储一些带有 pickle 的变量,但我遇到了一些问题。
显示的错误是:
# Error: IOError: file -maya console- line 6: 13 #
这就是我试过的方法:
import maya.cmds as mc
import pickle
names =["Marcus","Mario","Stefan"]
pickle.dump(names, open("names.dat","wb"))
您的代码存在一些问题,主要问题是 open
命令不知道如何将 "names.dat"
解析为正确的路径。还有一些其他问题:
- 您应该在
open
函数中传递完整路径。像 "path/to/my/directory/names.dat"
- 你用的是
"wb"
,但那是写成二进制的。问题是您传递的数据不是二进制的!相反,您可以使用 pickle.dumps(names, True)
将数据序列化为二进制数据。
- 您实际上可以使用
cPickle
而不是 pickle
。只需将所有内容替换为 cPickle
,它的工作方式应该完全相同。不同之处在于 cPickle
在 C 中处理而不是 Python,因此计算速度更快。
- 当您创建一个新的
open
对象时,您应该通过调用其关闭方法自行清理。您可以做的是将它与 with
一起使用,以便它在完成时自动关闭。
把所有这些放在一起,你应该得到这个:
import cPickle
names = ["Marcus", "Mario", "Stefan"]
with open("path/to/my/directory/names.dat", "wb") as f:
f.write(cPickle.dumps(names, True))
我正在尝试在 Maya 上使用 python 存储一些带有 pickle 的变量,但我遇到了一些问题。 显示的错误是:
# Error: IOError: file -maya console- line 6: 13 #
这就是我试过的方法:
import maya.cmds as mc
import pickle
names =["Marcus","Mario","Stefan"]
pickle.dump(names, open("names.dat","wb"))
您的代码存在一些问题,主要问题是 open
命令不知道如何将 "names.dat"
解析为正确的路径。还有一些其他问题:
- 您应该在
open
函数中传递完整路径。像"path/to/my/directory/names.dat"
- 你用的是
"wb"
,但那是写成二进制的。问题是您传递的数据不是二进制的!相反,您可以使用pickle.dumps(names, True)
将数据序列化为二进制数据。 - 您实际上可以使用
cPickle
而不是pickle
。只需将所有内容替换为cPickle
,它的工作方式应该完全相同。不同之处在于cPickle
在 C 中处理而不是 Python,因此计算速度更快。 - 当您创建一个新的
open
对象时,您应该通过调用其关闭方法自行清理。您可以做的是将它与with
一起使用,以便它在完成时自动关闭。
把所有这些放在一起,你应该得到这个:
import cPickle
names = ["Marcus", "Mario", "Stefan"]
with open("path/to/my/directory/names.dat", "wb") as f:
f.write(cPickle.dumps(names, True))