Python pickle模块和joblib模块浅析

来源:互联网 发布:中科院数据云 编辑:程序博客网 时间:2024/06/07 18:25

在Python中,如果希望透明地存储对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化,这是一个将任意复杂的对象转成对象的文本和二进制表示的过程。同样,必须能够将对象经过序列化后的形式恢复到原来的对象。这种序列化的过程称为pickle,可以将对象pickle成字符串、磁盘上的文件或者任何类似于文件的对象;反序列化的过程就是将这些字符串、文件或任何类似于文件的对象unpickle成原来的对象。

pickle接口

pickle模块提供了以下函数对:dumps(object)返回一个字符串,它包含了一个pickle格式的对象;loads(string)返回包含在pickle字符串中的对象;dump(object,file)将对象写到文件,这个文件可以是实际的物理文件,也可以是类似于文件的对象,这个对象具有write()方法,可以接受单个的字符串参数;load(file)返回包含在pickle文件中对象。

缺省情况下,dumps()和dump()使用可打印的ASCII表示来创建pickle。两者都有一个final参数,这个参数是可选的,若这个参数为True,则该参数指定用更快更小的二进制表示来创建pickle。loads()和load()则会自动检测pickle是二进制格式还是文本格式。在实际使用复杂对象的系统中,使用二进制格式可以在大小和速度方面带来显著的改进。

下面看一个对象保存为一个字符串的例子:

>>> import pickle>>> a1 = ("pickle",123,[4,5,6],{'A':1,'B':2})>>> p1 = pickle.dumps(a1)>>> a2 = pickle.loads(p1)

如果用更高效 的二进制来存储:

>>> import pickle>>> a1 = ("pickle",123,[4,5,6],{'A':1,'B':2})>>> p1 = pickle.dumps(a1,True)>>> a2 = pickle.loads(p1)

也可以将对象保存在磁盘文件中:

>>> import pickle>>> a1 = ("pickle",123,[4,5,6],{'A':1,'B':2})>>> with open('text.txt','wb') as file:>>>     pickle.dump(a,file)>>> with open('text.txt','rb') as file2:>>>     a2 = pickle.load(file2)

cPickle

值得一提的是,pickle 模块及其同类模块 cPickle 向 Python 提供了 pickle 支持。后者是用 C 编码的,它具有更好的性能,对于大多数应用程序,推荐使用该模块。

joblib

这里补充说一下joblib库,这个库是由scikit-learn外带的,scikit-learn库是机器学习的一个库,研究机器学习的童鞋都知道。引入joblib库也很简单,前提是安装了scikit-learn库:

>>> import sklearn>>> from sklearn.externals import joblib

对于大数据而言,joblib比pickle更加高效,但是joblib只能将对象存储在磁盘文件中,不能保存为字符串。

参考文献(该参考文献中博主讲的非常透彻):
http://www.cnblogs.com/cobbliu/archive/2012/09/04/2670178.html

1 0
原创粉丝点击