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

Python 2.7 在pickle/dill python中是否可以只序列化特定的类/函数?,python-2.7,pickle,joblib,dill,Python 2.7,Pickle,Joblib,Dill,我有一个只想序列化以下类/函数的应用程序: 没有Python基元数据类型 无Numpy数据类型 没有数据类型 那么,是否可以过滤保存在dill中的对象? (按类型上的循环进行筛选) 谢谢,虽然这不是一个完整的解决方案(即,您可能希望包含更多具有pandas数据类型的模块,numpy数据类型…而且您可能希望通过按类型而不是模块进行筛选来对内置类型进行更多选择)…我想这会让你得到你想要的 >>> import dill >>> import numpy >&

我有一个只想序列化以下类/函数的应用程序: 没有Python基元数据类型 无Numpy数据类型 没有数据类型

那么,是否可以过滤保存在dill中的对象? (按类型上的循环进行筛选)


谢谢,

虽然这不是一个完整的解决方案(即,您可能希望包含更多具有
pandas
数据类型的模块,
numpy
数据类型…而且您可能希望通过按
类型而不是模块进行筛选来对内置类型进行更多选择)…我想这会让你得到你想要的

>>> 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是否有这样的过滤方法,那么答案是否定的,而这不是一个完整的解决方案(也就是说,您可能希望包含更多具有
pandas
数据类型、
numpy
数据类型的模块……而且您可能希望通过
type
而不是module进行筛选,从而对内置类型进行更高的选择)……我认为这可以满足您的需求

>>> 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是否有这样一个过滤方法,那么答案是否定的。

谢谢,只需要创建一个包含所有原语类型、numpy和pandas的大列表。它可以用作回归测试,在dill中加入一个复杂/无标准类的列表,看看哪些通过了/失败了。这个列表可以维护由社区序列化(使其更容易检测哪个类被序列化/未序列化)。@Tensor:
dill
包括标准库中可以序列化和不能序列化的python对象列表。如果您执行
dill.load\u types()的某些变体
然后查看
dill.types
中的类型,您将看到
dill
可以(并且,根据
加载类型中使用的KWD,不能序列化)。这不是一个完整的列表。
dill.\u objects
中甚至有一个更全面的列表,它仍然主要是标准的库对象。我很想看看您的想法,请随时提交PR。谢谢,只需要创建一个包含所有基本类型、numpy和它可以用作回归测试,在dill中加入复杂/无标准类的列表,并查看哪些类通过/失败。此列表可由社区维护(使其更容易检测哪些类已序列化/未序列化).@Tensor:
dill
包括标准库中可以序列化和不能序列化的python对象列表。如果您执行
dill.load_types()
的一些变体,然后查看
dill.types
中的类型,您将看到
dill
可以(并且根据
load_types
中使用的KWD,不能序列化)。这不是一个完整的列表。
dill.\u objects
中甚至有一个更全面的列表,它仍然主要是标准的库对象。我很想看看您的想法,请随时提交PR。