在 python 中手动编辑转储的 pickle 文件
Manually editing a dumped pickle file in python
我有两个 classesClassA
和 ClassB
具有相同的内容和结构,只是名称不同。我使用 pickle.dump
将 ClassA
的对象保存到二进制文件中。但是,我现在想将它加载到另一个只能访问 ClassB
的程序中。使用 pickle.load
加载此文件现在失败,因为它找不到 ClassA
描述,因此会抛出一些错误,例如 No module named ClassA exists
.
为了解决这个问题,我手动调查了保存的二进制文件,并在文件中找到了用ASCII编码的所需class名称ClassA
。我猜想它正在寻找这个确切的 class 名称,这导致了上述错误。在此二进制文件中将此名称从 ClassA
更改为 ClassB
后,代码似乎正确加载了对象,但现在为 ClassB
。这就是我想要的。
但是,由于我手动编辑了这个文件,所以我想知道这样做是否会产生任何不利影响。或者是,如果它有效,那不是愚蠢的场景。
提前致谢。
None 的 pickle 格式使用文件中的偏移量或任何类型的压缩或加密,因此即使更改名称也可以改变长度。当然,您必须知道文本“ClassA”不会因为其他原因而出现,并且您的编辑器不会破坏文件——例如,通过尝试执行字符 decoding/encoding.
就是说,在这种情况下,我可能会创建一个虚拟包来给 ClassA
正确的名称,而不是编辑 pickle。
我有两个 classesClassA
和 ClassB
具有相同的内容和结构,只是名称不同。我使用 pickle.dump
将 ClassA
的对象保存到二进制文件中。但是,我现在想将它加载到另一个只能访问 ClassB
的程序中。使用 pickle.load
加载此文件现在失败,因为它找不到 ClassA
描述,因此会抛出一些错误,例如 No module named ClassA exists
.
为了解决这个问题,我手动调查了保存的二进制文件,并在文件中找到了用ASCII编码的所需class名称ClassA
。我猜想它正在寻找这个确切的 class 名称,这导致了上述错误。在此二进制文件中将此名称从 ClassA
更改为 ClassB
后,代码似乎正确加载了对象,但现在为 ClassB
。这就是我想要的。
但是,由于我手动编辑了这个文件,所以我想知道这样做是否会产生任何不利影响。或者是,如果它有效,那不是愚蠢的场景。
提前致谢。
None 的 pickle 格式使用文件中的偏移量或任何类型的压缩或加密,因此即使更改名称也可以改变长度。当然,您必须知道文本“ClassA”不会因为其他原因而出现,并且您的编辑器不会破坏文件——例如,通过尝试执行字符 decoding/encoding.
就是说,在这种情况下,我可能会创建一个虚拟包来给 ClassA
正确的名称,而不是编辑 pickle。