pickle
基本的数据序列和反序列化
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
pickle.dump(obj, file, [,protocol])
obj是保存对象,file是保存的类文件对象,protocal是序列化协议(0:ASCII;1:老二进制;2:新二进制)
注意file,举例:file=open('data.pkl', 'wb')
pickle.dumps(obj)
把 obj 对象序列化后以 bytes 对象返回,不写入文件
pickle.load(file)
从file中读取一个字符串,并将它重构为原来的python对象
pickle.loads(bytes_object)
从 bytes 对象中读取一个反序列化对象,并返回其重组后的对象
代码中见到的例子:
序列化
def serialize(data):
data_tuple = tuple(data.values())
return pickle.dumps(data_tuple)
反序列化
def deserialize(data): # data 是二进制数据
data_tuple = pickle.loads(data) # data_tuple 内元素可能不止4个 但是zip中只保留了前4个
keys = ('nodes', 'r_label', 'g_label', 'n_label')
return dict(zip(keys, data_tuple))
网上找的例子:
filename1 = 'random_forest.pkl'
filename2 = 'naive_bayes.pkl'
pickle.dump(r_clf,open(filename1,"wb"))
pickle.dump(clf,open(filename2,"wb"))
with open(file_path, 'wb') as f:
pickle.dump(incidence, f)