python序列化函数---json和pickle
1.序列化
把对象(变量)从内存中变成可存储或传输的过程称之为序列化
2.序列化的好处
(1)持久保存状态
(2)跨平台数据交互
3.json支持跨平台,仅支持python部分序列化
JSON和Python内置的数据类型对应如下
4.json序列化的用法
import json dic={'name':'egon','age':18} print(type(json.dumps(dic))) #将字典序列化到文件中 with open('yxwang.json','w') as f: f.write(json.dumps(dic)) #反序列化 with open('yxwang.json','r') as f: data=f.read() dic=json.loads(data) print(dic['name']) # -------------------------------- dic={'name':'egon','age':18} #json.dump(序列化对象,序列化的路径文件名) 等同于上面的简写方式 json.dump(dic,open('b.json','w')) #同理直接打开序列化的内容,直接可以取值 print(json.load(open('b.json','r'))['name'])
5.pickle的用法
pickle跟json的用法类似
注意:pickle只适用于python,并且有可能不同版本之间不兼容。因此只能用pickle保存写不重要的数据。
序列化文件中是 pickle类型的 bytes类型
import pickle dic={'name':'egon','age':18} #将字典序列化到文件 要以bytes类型写入 print(pickle.dumps(dic)) with open('d.pkl','wb') as f: f.write(pickle.dumps(dic)) #同理取值也要用bytes 类型 with open('d.pkl','rb') as f: dic=pickle.loads(f.read()) print(dic['name']) dic={'name':'egon','age':18} pickle.dump(dic,open('e.pkl','wb')) print(pickle.load(open('e.pkl','rb'))['name'])
### 注意 pickle可以序列化任意python类型 包括函数,
### 但是在反解的时候要确保该函数的内存地址依然在内存中,不然会报错,提示函数找不到。