Pickle模块可以将对象转换为一种可以传输或存储的格式用于保存字符串、列表、字典等数据。
一、dump()方法
pickle.dump(obj, file, [,protocol])
obj:表示要封装的对象
file:表示obj要写入的文件对象,file必须以二进制可写模式打开--'wb'
注释:序列化对象,将对象obj保存到文件file中去。参数protocol是序列化模式,默认是0(ASCII协议,表示以文本的形式进行序列化),protocol的值还可以是1和2(1和2表示以二进制的形式进行序列化。其中,1是老式的二进制协议;2是新二进制协议)
注:python-- open()函数:用于打开一个文件,创建一个file对象
open(name,mode):name---一个包含了你要访问的文件名称的字符串
mode---打开文件模式('rb':read binary 二进制可读;'wb':write binary 二进制可写)
二、load()方法
pickle.load(file)
file:要以二进制可读模式打开--'rb'
注释:反序列化对象,将文件中的数据解析为一个python对象。
具体使用方法:
方法一:
input:
a=[[1,2,3],[2,3,4],[3,4,5]]
b=[[2,2,3],[3,3,4],[4,4,5]]
pickle.dump(a,open('tmp.pkl','wb'))
#tmp.pkl为文件名详细路径,或者和该程序.py文件在同一个工程(文件夹)下
pickle.dump(b,open('tmp.pkl','wb'))
new_data2=pickle.load(open('tmp.pkl','rb'))
new_data3=pickle.load(open('tmp.pkl','rb'))
print(new_data2)
print(new_data3)
out:
[[2, 2, 3], [3, 3, 4], [4, 4, 5]]
[[2, 2, 3], [3, 3, 4], [4, 4, 5]]
用这种方法多次dump,只会保留最后一次的数据
方法二:
input:
a=[[1,2,3],[2,3,4],[3,4,5]]
b=[[2,2,3],[3,3,4],[4,4,5]]
f=open('tmp.pkl','wb')
pickle.dump(a,f)
pickle.dump(b,f)
f.close()
f=open('tmp.pkl','rb')
new_data2=pickle.load(f)
new_data3=pickle.load(f)
print(new_data2)
print(new_data3)
output:
[[1, 2, 3], [2, 3, 4], [3, 4, 5]]
[[2, 2, 3], [3, 3, 4], [4, 4, 5]]
用这种写法可以在一个pkl文件中写入多个数据,但是实际使用时,一个文件存入多个数据,可能会混淆,不推荐使用
建议一个pkl文件只写入一个数据,通过文件名进行标识