1.pickle是python语言的一个标准模块,安装python后已包含pickle库,不需要单独再安装,pickle模块实现了基本的数据序列化和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
2.pickle模块有两类主要的接口,即序列化和反序列化
3.序列化: pickle.dump(), Pickler(file, protocol).dump(obj), pickle.dumps()
序列化的方法为 pickle.dump()
,该方法的相关参数如下:
pickle.dump(obj, file, protocol=None,*,fix_imports=True), 一般protocol使用默认值即可,
该方法实现的是将序列化后的对象obj以二进制形式写入文件file中,进行保存。它的功能等同于 Pickler(file, protocol).dump(obj)
。
关于参数file,有一点需要注意,必须是以二进制的形式进行操作(写入)
import pickle
with open('svm_model_iris.pkl', 'wb') as f:
pickle.dump(svm_classifier, f)
file为’svm_model_iris.pkl’,并且以二进制的形式(’wb’)写入。
pickle.dumps()
方法的参数如下:
pickle.dumps(obj, protocol=None,*,fix_imports=True),读取的时候,参数protocol是自动选择的,load()方法中没有这个参数pickle.dumps()
方法跟pickle.dump()
方法的区别在于,pickle.dumps()
方法不需要写入文件中,它是直接返回一个序列化的bytes对象。
反序列化: pickle.load(), Unpickler(file).load(), pickle.loads()
4.序列化的方法为 pickle.load()
,该方法的相关参数如下:
pickle.load(file, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)
该方法实现的是将序列化的对象从文件file中读取出来。它的功能等同于 Unpickler(file).load()
。
关于参数file,有一点需要注意,必须是以二进制的形式进行操作(读取)
import pickle
with open('svm_model_iris.pkl', 'rb') as f:
model = pickle.load(f)
file为’svm_model_iris.pkl’,并且以二进制的形式(’rb’)读取。
pickle.loads()
方法的参数如下:
pickle.loads(bytes_object, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)pickle.loads()
方法跟pickle.load()
方法的区别在于,pickle.loads()
方法是直接从bytes对象中读取序列化的信息,而非从文件中读取。