是否可以在pickle / dill python中仅序列化特定的类/函数?

时间:2016-12-12 08:07:02

标签: python-2.7 pickle joblib dill

我有一个想要仅序列化类/函数的应用程序:    没有Python原始数据类型    没有Numpy数据类型    没有熊猫数据类型。

那么,是否有可能过滤掉要在莳萝中保存的对象? (按类型循环过滤)

谢谢,

1 个答案:

答案 0 :(得分:2)

虽然这不是一个完整的解决方案(即您可能希望包含更多具有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是否有这样的过滤方法,那么答案是否定的。