序列化和反序序列化
⼀:什么是 序列化与反序列化
1,什么是序列化:序列化就是将内存中的数据结构转换成⼀种中间格式存储到硬盘或者基于⽹络传输    2,反序列化:就是将硬盘或者⽹络中传过来的⼀种数据格式转换成内存中的数据结构
⼆:为什么要有序列化和反序列化
1,可以保存程序的运⾏状态
2,数据的跨平台交互
三:  怎么⽤
json
优点:
跨平台性强
缺点:只能⽀持/对应部分python部分的数据类型
注意点:# json格式不能识别单引号,全都是双引号
pickle
优点: 可以⽀持/对应python的所有数据类型
缺点:只能被python识别,不能跨平台
四:json和pickle实例
1,⽤json实现序列化
import  json
dic={'name':'egon','age':18}
##序列化
res=json.dumps(dic)
###写⼊⽂件
with open ('aa.txt','wt',encoding='utf-8')as f:
f.write(res)
#1和2可以合作⼀步
# with open('db.pkl','wb') as f:
#    json.dump(dic,f)
2.⽤json实现反序列化
import json
#从⽂件中读取json格式
with open(‘aa.txt','rt',encofing='utf-8')as f:
ad()
####将json格式转成内存中的数据类型
json.loads(res)
#1和2可以合作⼀步
# with open('db.pkl','rb') as f:
#    dic=json.load(f)
import pickle####同理,pickle模块也是这样是使⽤
3,⽤pickle实现序列化
import pickle
dic={'a':1,'b':2,'c':3}
# #1 序列化
# pkl=pickle.dumps(dic)
# # print(pkl,type(pkl))
# #2 写⼊⽂件
# with open('db.pkl','wb') as f:
#    f.write(pkl)
#1和2可以合作⼀步
# with open('db.pkl','wb') as f:
#    pickle.dump(dic,f)
4 pickle模块实现反序列化
import pickle
# # #1、从⽂件中读取pickle格式
# with open('db.pkl','rb') as f:
#    ad()
# #2、将json_str转成内存中的数据类型
# dic=pickle.loads(pkl)
# print(dic['a'])
#1和2可以合作⼀步
# with open('db.pkl','rb') as f:
#    dic=pickle.load(f)
# print(dic['a'])
五:eval 在有些情况下也可以被⽤来做反序列化的⼯作,不过不建议使⽤。
因为eval本质上只是把字符串⾥⾯的表达式拿出来运⾏⼀下,当涉及到python中数据类型的关键字时,并不能成功的反序列化。l例如:
当json⽂件中存储的数据是[ 1  ,  true  ,  null  ]
# ⽤json反序列化
# with open('db.json','rt',encoding='utf-8') as f:
#    l=json.load(f)
#    print(l)
# ⽤eval反列化
# with open('db.json','rt',encoding='utf-8') as f:
#    ad() #s ='[1, true, null]'
#    dic=eval(s) #eval('[1, true, null]')#这样会报错,因为python会认为true是⼀个变量名字⽽没有定义
#    print(dic['name'])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。