我有两个类ClassA
和ClassB
,它们的内容和结构相同,但名称不同。我使用ClassA
将pickle.dump
的对象保存到二进制文件中。但是,我现在想将其加载到只能访问ClassB
的其他程序中。现在无法使用pickle.load
加载此文件,因为它找不到ClassA
说明,因此会引发类似No module named ClassA exists
的错误。
为解决此问题,我手动检查了保存的二进制文件,并在文件中找到了用ASCII编码的必需类名ClassA
。我猜想它正在寻找这个确切的类名,从而导致上述错误。在将此二进制文件中的名称从ClassA
更改为ClassB
时,代码似乎可以正确加载对象,但现在是ClassB
。这就是我想要的。
但是,由于我是手动编辑此文件的,所以我想知道这样做是否会对线路产生不利影响。还是它,如果能解决问题,那不是愚蠢的情况。
谢谢。
答案 0 :(得分:1)
泡菜格式都不使用文件中的偏移量或任何类型的压缩或加密方式,因此即使更改长度也可以更改名称。您必须知道,“ ClassA”文本当然不会由于其他原因出现,并且您的编辑器不会破坏文件(例如,尝试进行字符解码/编码)。
也就是说,在这种情况下,我可能会创建一个虚拟包装来为ClassA
提供正确的名称,而不是编辑泡菜。