在 python 中手动编辑转储的 pickle 文件

Manually editing a dumped pickle file in python

我有两个 classesClassAClassB 具有相同的内容和结构,只是名称不同。我使用 pickle.dumpClassA 的对象保存到二进制文件中。但是,我现在想将它加载到另一个只能访问 ClassB 的程序中。使用 pickle.load 加载此文件现在失败,因为它找不到 ClassA 描述,因此会抛出一些错误,例如 No module named ClassA exists.

为了解决这个问题,我手动调查了保存的二进制文件,并在文件中找到了用ASCII编码的所需class名称ClassA。我猜想它正在寻找这个确切的 class 名称,这导致了上述错误。在此二进制文件中将此名称从 ClassA 更改为 ClassB 后,代码似乎正确加载了对象,但现在为 ClassB。这就是我想要的。

但是,由于我手动编辑了这个文件,所以我想知道这样做是否会产生任何不利影响。或者是,如果它有效,那不是愚蠢的场景。

提前致谢。

None 的 pickle 格式使用文件中的偏移量或任何类型的压缩或加密,因此即使更改名称也可以改变长度。当然,您必须知道文本“ClassA”不会因为其他原因而出现,并且您的编辑器不会破坏文件——例如,通过尝试执行字符 decoding/encoding.

就是说,在这种情况下,我可能会创建一个虚拟包来给 ClassA 正确的名称,而不是编辑 pickle。