在没有文件系统的情况下序列化 Python 个对象
Serialize Python objects without file system
我想序列化经过训练的 scikit 管道对象以重新加载它以进行预测。我看到的 pickle 和 joblib dump 是两种常用的方法,而 joblib 是更可取的方法。
在我的例子中,我想将序列化的 python 对象存储在数据库中并从那里加载它,反序列化它并将其用于预测。是否可以在没有任何文件系统访问权限的情况下序列化对象?
是的,对于 pickle 库,您可以使用 pickle.dumps
而不是 pickle.dump
来获取对象的序列化版本。
serialized_object = pickle.dumps(object)
这个 returns 一个 bytes 对象,然后您应该能够将其存储在您的数据库中,可能会在这样做之前将其转换为 base64,或者直接转换。
你可以这样做:
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就是一个bytes对象。而 base64_obj 是 base64 版本。 Select你喜欢什么。
我想序列化经过训练的 scikit 管道对象以重新加载它以进行预测。我看到的 pickle 和 joblib dump 是两种常用的方法,而 joblib 是更可取的方法。
在我的例子中,我想将序列化的 python 对象存储在数据库中并从那里加载它,反序列化它并将其用于预测。是否可以在没有任何文件系统访问权限的情况下序列化对象?
是的,对于 pickle 库,您可以使用 pickle.dumps
而不是 pickle.dump
来获取对象的序列化版本。
serialized_object = pickle.dumps(object)
这个 returns 一个 bytes 对象,然后您应该能够将其存储在您的数据库中,可能会在这样做之前将其转换为 base64,或者直接转换。
你可以这样做:
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就是一个bytes对象。而 base64_obj 是 base64 版本。 Select你喜欢什么。