是否可以在 pickle / dill python 中仅序列化特定的 classes/functions?
Is it possible to serialize only specific classes/functions in pickle / dill python?
我有一个只想序列化 classes/functions 的应用程序,它是:
无 Python 原始数据类型
没有 Numpy 数据类型
没有 pandas 数据类型。
那么,是否可以过滤要保存在 dill 中的对象?
(按类型循环过滤)
谢谢,
虽然这不是一个完整的解决方案(即您可能希望包含更多具有 pandas
数据类型、numpy
数据类型的模块……并且您可能还希望包含更多通过 type
而不是模块过滤来选择内置类型)……我认为它可以满足您的需求。
>>> import dill
>>> import numpy
>>> import pandas
>>>
>>> target = numpy.array([1,2,3])
>>> dill.dumps(target) if not dill.source.getmodule(type(target)) in [numpy, pandas.core.series, dill.source.getmodule(int)] else None
>>>
>>> target = [1,2,3]
>>> dill.dumps(target) if not dill.source.getmodule(type(target)) in [numpy, pandas.core.series, dill.source.getmodule(int)] else None
>>>
>>> target = lambda x:x
>>> dill.dumps(target) if not dill.source.getmodule(type(target)) in [numpy, pandas.core.series, dill.source.getmodule(int)] else None
>>>
>>> class Foo(object):
... pass
...
>>> target = Foo()
>>> dill.dumps(target) if not dill.source.getmodule(type(target)) in [numpy, pandas.core.series, dill.source.getmodule(int)] else None
'\x80\x02cdill.dill\n_create_type\nq\x00(cdill.dill\n_load_type\nq\x01U\x08TypeTypeq\x02\x85q\x03Rq\x04U\x03Fooq\x05h\x01U\nObjectTypeq\x06\x85q\x07Rq\x08\x85q\t}q\n(U\r__slotnames__q\x0b]q\x0cU\n__module__q\rU\x08__main__q\x0eU\x07__doc__q\x0fNutq\x10Rq\x11)\x81q\x12}q\x13b.'
>>>
但是,如果你问dill
有没有这样的过滤方式,那么答案是否定的。
我有一个只想序列化 classes/functions 的应用程序,它是: 无 Python 原始数据类型 没有 Numpy 数据类型 没有 pandas 数据类型。
那么,是否可以过滤要保存在 dill 中的对象? (按类型循环过滤)
谢谢,
虽然这不是一个完整的解决方案(即您可能希望包含更多具有 pandas
数据类型、numpy
数据类型的模块……并且您可能还希望包含更多通过 type
而不是模块过滤来选择内置类型)……我认为它可以满足您的需求。
>>> import dill
>>> import numpy
>>> import pandas
>>>
>>> target = numpy.array([1,2,3])
>>> dill.dumps(target) if not dill.source.getmodule(type(target)) in [numpy, pandas.core.series, dill.source.getmodule(int)] else None
>>>
>>> target = [1,2,3]
>>> dill.dumps(target) if not dill.source.getmodule(type(target)) in [numpy, pandas.core.series, dill.source.getmodule(int)] else None
>>>
>>> target = lambda x:x
>>> dill.dumps(target) if not dill.source.getmodule(type(target)) in [numpy, pandas.core.series, dill.source.getmodule(int)] else None
>>>
>>> class Foo(object):
... pass
...
>>> target = Foo()
>>> dill.dumps(target) if not dill.source.getmodule(type(target)) in [numpy, pandas.core.series, dill.source.getmodule(int)] else None
'\x80\x02cdill.dill\n_create_type\nq\x00(cdill.dill\n_load_type\nq\x01U\x08TypeTypeq\x02\x85q\x03Rq\x04U\x03Fooq\x05h\x01U\nObjectTypeq\x06\x85q\x07Rq\x08\x85q\t}q\n(U\r__slotnames__q\x0b]q\x0cU\n__module__q\rU\x08__main__q\x0eU\x07__doc__q\x0fNutq\x10Rq\x11)\x81q\x12}q\x13b.'
>>>
但是,如果你问dill
有没有这样的过滤方式,那么答案是否定的。