序列化模块
序列化——转向一个字符串数据类型
序列——字符串
用在数据存储以及在网络上传输的时候等
从数据类>>>字符串的过程 叫序列化
从字符串>>>数据类型的过程 叫反序列化
序列化格式
json 通用的序列化格式
json是一个在所有语言都通用的序列化格式,但是相对的它支持的数据类型就比较少了
只有很少的一部分数据类型能够通过json转化成字符串
在python中,数字int,字符串str,列表list,字典dict都是能序列化的
元组tuple也能序列化,不过它是转成列表再序列化的,反序列化后还是列表
集合set是不能进行序列化的
json的序列化方法dumps和反序列化方法loads
dumps
import jsonli = [1,2,3,'holle',[22,33],{ 'k1':'v1'},(23,3)]ret = json.dumps(li)print(type(ret),ret)
<class 'str'> [1, 2, 3, "holle", [22, 33], {"k1": "v1"}, [23, 3]]
loads
import jsonli = [1,2,3,'holle',[22,33],{ 'k1':'v1'},(23,3)]ret = json.dumps(li)print(type(ret),ret)ret2 = json.loads(ret)print(type(ret2),ret2)
<class 'str'> [1, 2, 3, "holle", [22, 33], {"k1": "v1"}, [23, 3]]
<class 'list'> [1, 2, 3, 'holle', [22, 33], {'k1': 'v1'}, [23, 3]]除了这俩还有另外两个dump和load,这俩看着和上面俩只是差个s
它们的功能也是相似的,当然也有着不听之处
dump
import jsonli = {1:"a",2:'b'}f = open('file','w',encoding='utf-8')json.dump(li,f)f.close()
它的作用是在一个文件中写入序列化之后的字符串
load
import jsonli = {1:"a",2:'b'}f = open('file','w',encoding='utf-8')json.dump(li,f)f.close()f = open('file')res = json.load(f)f.close()print(type(res),res)
<class 'dict'> {'1': 'a', '2': 'b'}
对文件的读取,读取必须是用dump写入的
pickle
所有python中的数据类型都可以转化成字符串形式
pickle序列化的内容只有python能理解
pickle反序列化必须要与序列化时相同的环境支持
pickle的用法和json的一样
不过dumps写的是bytes类型的,所以读写要加上bytes类型的转换
shelve
序列化句柄
使用句柄直接操作,非常方便
import shelvef = shelve.open('shelve_file')f['key'] = { 'int':10, 'float':9.5, 'string':'Sample data'}f.close()f1 = shelve.open('shelve_file')existing = f1['key'] f1.close()print(existing)
{'float': 9.5, 'int': 10, 'string': 'Sample data'}
直接对文件句柄操作,就可以存入数据
取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错