为什么要序列化
内存中的字典、列表、集合以及各种对象,如何保存到一个文件中。
设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列。所以必须把数据额转换为字节序列,输出到文件,这就是序列化,反之,从文件的字节 序列恢复到内存中,就是反序列化。
1、定义
Serialization系列化,将内存中对象存储下来,把他变成一个个字节。二进制。
deSerialization反序列化,将文件的一个个字节到内存中。
序列胡保存到文件就是持久化。
可将数据序列化后持久化,或者网络传输,也可以将文件中或者网络接受到的字节序列反序列化。
2、pickle库
Python中的序列化、反序列化模块
dumps对象序列化为bytes对象
dump对象序列化到文件对象,就是存入到文件。
loads从bytes对象反序列化。
load对象反序列化,从文件读取数据.
##
import pickle
filename = 'ser'
x= 'a'
y = '100'
z = '100'
with open(filename,'wb') as f:
pickle.dump(x,f)
pickle.dump(y,f)
pickle.dump(z,f)
with open(filename,'rb')as f:
for _ in range(3):
a = pickle.load(f)
print(a,type(a))
还原的时候不一定是完全一样的。
序列化应用:一般来说,本地序列化的情况,应用较少,大多数都是用在网络传输上面的。
将数据序列化后通过网络传输到远程节点,远程服务器上的服务将接受到的数据反序列化后,就可以使用了。
但是,要注意的是,远程接收端,反序列化时候必须有对应的数据类型,否则就会报错。尤其是自己定义的类。必须远程得有一致的定义。
3、Json
1)是一种轻量级的数据交换格式,基于ECMAScript(w3c制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
2)数据类型
值
双引号引起来的字符串,数值,true和flase,null,对象,数组,这些都是值。
字符串
由双引号包围起来的任意字符的组合,可以有转义字符。
数值:有正负,整数,浮点数。
对象:无序的键值对的集合。
格式:{key1:value1,.....keyn:valuen}
Key必须是一个字符串,需要双引号包围这个字符。
Value可以是任意合法的值。
数组:有序的值的集合
格式:[value1,....valuen]