"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" 解析为正确的路径。还有一些其他问题:

  1. 您应该在 open 函数中传递完整路径。像 "path/to/my/directory/names.dat"
  2. 你用的是"wb",但那是写成二进制的。问题是您传递的数据不是二进制的!相反,您可以使用 pickle.dumps(names, True) 将数据序列化为二进制数据。
  3. 您实际上可以使用 cPickle 而不是 pickle。只需将所有内容替换为 cPickle,它的工作方式应该完全相同。不同之处在于 cPickle 在 C 中处理而不是 Python,因此计算速度更快。
  4. 当您创建一个新的 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))