序列化与反序列化
什么是序列化?
序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输。
反序列化就是将硬盘中或者网络中传来的一种数据格式转换成内存中数据结构。
为什么要有?
1.可以保存程序的运行状态
2.实现数据的跨平台交互
怎么用?
json&pickle模块
其中json是通用的而pickle是只能在python识别
json优点:
具有跨平台性
json的局限性
只能支持/对应python部分的数据类型
pickle的优点:
可以支持所有的python数据类型
pickle的缺点:
只能被python识别,不能跨平台
————————————————————————————————————————————————————————————————————————————————————————————————————————————
json的序列化.py
import json
func_dic = {
'1': 'login',
'2': 'register',
'3': 'check_balance',
'4': 'transfer',
'5': 'reply',
}
# 序列化:将内存中的数据类型——————————————>json中间格式
# 1.序列化得到json_str
# json_str = json.dumps(func_dic)
# print(json_str,type(json_str))
# {"1": "login", "2": "register", "3": "check_balance", "4": "transfer", "5": "reply"} <class 'str'>
# json格式全都是双引号
# 2.把json_str写入文件存起来
# with open('func.json','wt',encoding='utf-8')as f :
# f.write(json_str)
# 1跟2合为一步
with open('func.json','wt',encoding='utf-8')as f:
json.dump(func_dic,f)
______________________________________________________________________________________________________________
json的反序列化.py
import json
# 反序列化:json的中间格式------------------>内存中的数据类型
#从文件中读取json_str
# with open('func.json','rt',encoding='utf-8')as f:
# json_str = f.read()
#
# # 将json_str转化成内存中的数据类型
# func_dic = json.loads(json_str)
#
# print(func_dic['2'])
# 1跟2可以合成一步
with open('func.json','rt',encoding='utf-8')as f:
func_die = json.load(f)
print(func_die['1'])
——————————————————————————————————————————————————————————————————————————————————————————————————————————————
json注意点
# json格式不能识别单引号,只能识别双引号
import json
# with open('func1.json','rt',encoding='utf-8')as f:
# l = json.load(f)
# print(l)
# 用json序列化
# with open('func1.json','wt',encoding='utf-8')as f:
# l=[1,None,True]
# json.dump(l,f)
# 用evel反序列化
# with open('func.json','rt',encoding='utf-8')as f:
# s = f.read()
# func_dic = eval(s)
# print(func_dic['1'])
# with open('func1.json','rt',encoding='utf-8')as f:
# s=f.read() #s = '[1,null,true]'
# l = eval(s) #evel('[1,null,true]')
# print(l)
# evel是把后面的字符串里的表达式拿出来在当前位置运行一下,把结果赋值给一个变量名
————————————————————————————————————————————————————————————————————————————————————————————————————————————-—
pickle的序列化与反序列化.py
import pickle
# dic = {'name':'zrg','password':123,'height':170,'weight':120}
#
# # 序列化
# pkl = pickle.dumps(dic)
# print(pkl,type(pkl))
#
# with open(r'db.pkl','wb')as f:
# f.write(pkl)
# with open(r'db.pkl','wb')as f:
# pickle.dump(dic,f)
# 反序列化
# with open(r'db.pkl','rb')as f:
# pkl = f.read()
# dic = pickle.loads(pkl)
# print(dic['name'])
# with open(r'db.pkl','rb')as f:
# dic = pickle.load(f)
#
# print(dic['weight'])