json与pickle模块
什么是序列化和反序列化?为什么要序列化?
序列化就是把内存当中的数据转成一种其它格式,这种格式可以存到文件里去
反序列化就是从文件里读出一种格式,可以把这种格式反解成内存当中的数据类型
1、持久保存状态需知一个程序的执行就在处理一系列状态的变化,‘状态‘会以各种各样有结构的数据类型的形
式被保存在内存中。内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关
于这个程序的之前一段时间的数据(有结构)都被清空了。在断电或重启程序之前将程序当前内存中所有的数
据都保存下来(存档),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。
2、跨平台数据交互序列化之后,不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,
如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平
台数据交互。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
json
import json
# ====================json 格式的序列化与反序列化1
# dic = {‘name‘:"egon","age":18.5,"k1":True,‘k2‘:None,‘k3‘:(1,2,3)}
# json_str = json.dumps(dic)
# print(json_str,type(json_str))
# with open(‘a.json‘,mode=‘wt‘,encoding=‘utf-8‘) as f:
# f.write(json_str)
# with open(‘a.json‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
# json_str = f.read()
# res = json.loads(json_str)
# print(res,type(res))
# ====================json 格式的序列化与反序列化2
# dic = {‘name‘:"egon","age":18.5,"k1":True,‘k2‘:None,‘k3‘:(1,2,3)}
# with open(‘a.json‘,mode=‘wt‘,encoding=‘utf-8‘) as f:
# json.dump(dic,f)
# with open(‘a.json‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
# res = json.load(f)
# print(res,type(res))
json与python内置数据类型的区别
pickle
Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。
# import pickle
# dic = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5}
# print(pickle.dumps(dic))
# with open(‘a.txt‘,mode=‘wb‘)as f:
# pickle.dump(dic,f)
# with open(‘a.txt‘,‘rb‘)as a:
# res = pickle.load(a)
# print(res)
总结:
json 用于跨平台数据交互,不能转集合,会报错
pickle用于仅用于python,支持python所有类型
模块-序列化和反序列化:json与pickle模块