【问题标题】:Serialize Python objects without file system序列化没有文件系统的 Python 对象
【发布时间】:2020-07-30 09:47:37
【问题描述】:

我想序列化经过训练的 scikit 管道对象以重新加载它以进行预测。我看到的 pickle 和 joblib dump 是两种常用的方法,而 joblib 是更可取的方法。

在我的情况下,我想将序列化的 python 对象存储在数据库中并从那里加载它,反序列化它并将其用于预测。是否可以在没有任何文件系统访问权限的情况下序列化对象?

【问题讨论】:

    标签: python serialization pickle joblib


    【解决方案1】:

    是的,对于 pickle 库,您可以使用 pickle.dumps 而不是 pickle.dump 来获取对象的序列化版本。

    serialized_object = pickle.dumps(object)
    

    这会返回一个bytes 对象,然后您应该能够将其存储在您的数据库中,在这样做之前可能会将其转换为base64,或者直接转换。

    【讨论】:

    • 谢谢,当在不同的 python 版本中加载转储时,joblib 是否存在与 pickle 不同的不兼容问题?
    • @HansHupe 真的不知道,抱歉
    【解决方案2】:

    你可以这样做:

    import joblib
    from io import BytesIO
    import base64
    with BytesIO() as tmp_bytes:
        joblib.dump({"test": "test"}, tmp_bytes)
        bytes_obj = tmp_bytes.getvalue()
        base64_obj = base64.b64encode(bytes_obj)
    

    那么,bytes_obj 是一个字节对象。而base64_obj 是base64 版本。选择你喜欢的。

    【讨论】:

    • 不错,很有趣,比 pickle.dumps 有什么优势吗?
    • joblib 存储 numpy 数组的速度更快
    • 关于python版本问题和pickle一样吗?
    • 顺便说一句:我怎样才能从转储中加载它?
    • 他们在不同的python版本有同样的问题。
    猜你喜欢
    • 2014-08-16
    • 2019-09-27
    • 2021-09-04
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多