pockle模块和json模块很对地方用法都一样
1、只能在python中使用,只支持python的基本数据类型。
2、可以处理复杂的序列化语法。(例如自定义的类的方法,游戏的存档等)
3、序列化的时候,只是序列化了整个序列对象,而不是内存地址。
4、编码dump 和dumps 解码 loads 和load 区别,带s的在读取文件类容,多了一步,需要先读在取,不带S的就直接可以取 见代码示例
代码示例和json的对比
a=[{1:3,"a":12},[1,2,3],(1,2,3),[(1,2,4)],1.2,10,True,False]
f=pickle.dumps(a)
j=json.dumps(a)
print(f)
print(j)
print("-------------------")
print("pickle解码",pickle.loads(f))
print("json解码",json.loads(j))
文件写入和读取 dump 和dumps loads 和load 区别
def sayhi(name):
print("hello",name)
info = {
'':'',
'age':32,
'func':sayhi #这里注意和函数名一样 ,pick.dump后就以对象的形式储存到了文件
}
pickle.dump(info,open('rras',"ab"))
a=pickle.load(open("rras","rb")) #解码出来 可以看到结果,是对象
print(a)
print(a['func'](1)) #调用函数
#带S 的和不带S的区别,多了写和 读的步骤,建议使用这种据说是安全
f=open("path","ab")
data=pickle.dumps(info) #写的时候先把内容编码
f.write(data)#然后在写
f=open("path","rb")
obj=f.read() #读是先把文件的内容读出来
print(pickle.loads(obj))#然后在解码
类对象也可以储存
class save_obj:
def __init__(self,name,age):
self.name =name
self.age=age
def save(self):
with open("path", "wb") as f:
pickle.dump(self,f) #把类对象储存到文件
def getll(self):
data=pickle.load(open("path","rb")) #从文件解码出类对象