【问题标题】:how to make dill load python2 pickle in python3如何在python3中使莳萝加载python2泡菜
【发布时间】:2019-11-13 11:41:53
【问题描述】:

如果使用pickle 腌制,则以下 sn-p 有效。但是如果我有一个使用 dill 转储的对象,dill.load 不起作用,因为dill.load 不接受任何encoding 参数。有什么办法可以用莳萝来完成这项工作吗?

with open(‘py2pickle.p’,'rb') as f
    data = pickle.load(f, encoding='latin1')

【问题讨论】:

    标签: python-3.x encoding io pickle dill


    【解决方案1】:

    您在 python 2 中执行了dill.dump,并希望在 python 3 中执行 dill.load。有两个问题:

    1. 没有保证,无论你是什么 用于序列化,泡菜将适用于任何版本的 不是您使用的python(即3.7 vs 3.6 vs 2.7)。

    2. 正如您所指出的,目前dillload 上没有编码参数,因此您可能需要在dump/load 对象之前/之后进行一些转换(直接在对象本身上)。

    请注意,我将在不久的将来向dumpload 添加更多序列化选项参数(包括encoding 参数)。

    更新:dill 现在有一个编码参数,以及其他有助于将 pickle 从 2.x 转换为 3.x 的参数。

    【讨论】:

    • 不。我在 python2 中做了dill.dump 并想在 python3 中加载它
    • 我不知道你是 dill 开发者/维护者。感谢您的出色工作!
    • 我刚刚添加了 encoding 参数和其他更新的 python 3.x 参数,用于从 2.x 读取泡菜。
    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多