Python pickle模块和joblib模块浅析

xiaoxiao2021-02-27  411

在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

转载请注明原文地址: https://www.6miu.com/read-251.html

最新回复(0)