美文网首页
python 2 和 python 3 pickle 的兼容性问

python 2 和 python 3 pickle 的兼容性问

作者: 虚胖一场 | 来源:发表于2019-02-27 20:31 被阅读0次

    由于工作原因,需要在 python 3 下用 pickle.loadpickle.loads 方法反序列化在 python 2 下用 cPickle.dumpcPickle.dumps 方法序列化的对象。

    当对象类型是 numpy 的 array、pandas 的 DataFrame 和 Series,以及 datetime、date、time 时,会报 UnicodeDecodeError。根据官方文档,反序列化时设置 encoding='latin1' 可解决这一问题。

    但经过实测,当对象为 datetime 类型时,使用上述设置,在 python 3.6.8 和 python 3.7.2 下可以正确运行,但在 python 3.6.5 和 python 3.7.0 下则会报 TypeError。此外,当设置 encoding='bytes'时,上述四个 python 版本下均可正确运行,但该设置无法反序列化 array、DataFrame 和 Series。如果你的对象是一个既包含 datetime、又包含 array 的复杂对象,而你的环境又刚刚好是 python 3.6.5 或 python 3.7.0,那么就只能掀桌子了。(完

    相关文章

      网友评论

          本文标题:python 2 和 python 3 pickle 的兼容性问

          本文链接:https://www.haomeiwen.com/subject/qkofuqtx.html