一、定义
序列化是指将对象从内存中取出来写入存储区,如txt文件中,反序列则相反。
二、 应用场景
跨平台数据传输;
保留上一次运行程序时对对象的修改
三、 模块和函数
- json
dumps()、dump()(序列化)
loads()、load() (反序列化)
- pickle
dumps()、dump()(序列化)
loads()、load ()(反序列化)
四、 应用案例
- pickle
import pickle
info = {"lyrics": "GeCi",
"song": "GeQu",
"time": 89}
with open("pickling.txt","wb") as f: #序列化
f.write(pickle.dumps(info))
with open("pickling.txt", "rb") as f: #反序列化
print(pickle.load(f))
上述代码首先将字典info转化为str类型的对象,然后写入txt文件中,其中,第8行可以替换为:
pickle.dump(info,f)
二者实现的效果是一样的,只不过dums直接将对象序列化后写入txt文件中。写入文件的结果是一堆看不懂的东西,如下所示:
但是这并没有出错,不信,最后用load()函数将其反序列化后在控制台输出结果为:
同样地,loads()函数可以替换load函数。如下:
1 print(pickle.loads(f.read()))
- json
pickle是python独有的,而json可以实现不同编程语言的数据转换和传输。不同编程语言进行数据传输就需要将自身数据类型转换为一个共同的标准类型,json就是其中一种。json数据类型和python数据类型的对应关系如下所示:
json的用法与pickle大致相同,不再赘述,但要注意在读写文件时json的读写模式不是“wb”和“rb”,而是“w”和“r”。