Nov*_*vak 5 pickle python-2.7 python-3.x
我有一个在 python 2 中创建的泡菜文件(我不知道具体是如何创建的)。它打算由以下 python 2 行加载,在 python 3 中使用时(不出所料)不起作用:
with open('filename','r') as f:
foo, bar = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
结果:
“ascii”编解码器无法解码位置 1219 中的字节 0xc2:序号不在范围内 (128)
手动检查文件表明它是 utf-8 编码的,因此:
with open('filename','r', encoding='utf-8') as f:
foo, bar = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
结果:
类型错误:需要类似字节的对象,而不是“str”
使用二进制编码:
with open('filename','rb', encoding='utf-8') as f:
foo, bar = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
结果:
ValueError:二进制模式不采用编码参数
没有二进制编码:
with open('filename','rb') as f:
foo, bar = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
结果:
UnpicklingError: 无效的加载键,“ ”。
这个泡菜文件是不是刚刚坏了?如果没有,我怎样才能在 python 3 中撬开这个东西?(我已经浏览了大量相关问题,但还没有找到任何有用的东西。)
最后,请注意原始
导入 cPickle 作为泡菜
已被替换为
导入 _pickle 作为泡菜