Python-序列化\反序列化以及json、pickle,hashlib模块

1、序列化和反序列化​

eval是Python内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。​我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,都是一个意思。

2、为什么要序列化?

持久保存状态在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。
跨平台数据交互序列化之后,不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。

3、json、pickle

在python中,有专门处理json格式的模块 — json 和 picle模块

json: 是一种轻量级的数据交换格式,用于字符串(unicode text)和python基本数据类型间进行转换。优点:跨语言跨平台,应用范围大,体积小;缺点:只能支持 int/str/list/tuple/dict等基本python数据结构;
pickle: 将python的几乎所有数据类型(对象、类)转换为二进制流。 优点:专为python设计,支持python的几乎所有数据类型;缺点:只能在python中使用,存储数据空间大;

4、hashlib

什么叫hash:
hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash值;
hash值的特点是:
只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校;
不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码;
只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的。

猜你喜欢

转载自blog.csdn.net/msmso/article/details/107672740