19.序列化模块

序列化:将原本的字典,列表等内容转换成一个字符串的过程就叫做序列化

反序列化:从字符串转换成各种数据类型的过程

序列化的目的:
1,以某种存储形式使自定义对象持久化
2,将对象从一个地方传递到另外一个地方
3,使程序更具维护性

具体方法:

json

能够转换的数据类型 数字,字符串,列表,字典,元组(集合不行)

优点:是一种通用的序列化格式,各种语言进行数据交换的桥梁

缺点:只有很少的一部分数据类型能够通过json转化成字符串

dumps和loads

这两个方法经常被用来操作内存中的数据

import json
dic1={"1":"hello"}
print(dic1,type(dic1))
str_d=json.dumps(dic1)   #序列化
print(str_d,type(str_d))
dic_d=json.loads(str_d)   #反序列化
print(dic_d,type(dic_d))

执行结果:

{'1': 'hello'} <class 'dict'>
{"1": "hello"} <class 'str'>
{'1': 'hello'} <class 'dict'>

dump和load

被用来操作文件中的数据,一次性写入,一次性读出

同时dump和dumps是将数据类型转换成bytes形式,要注意打开文件的模式为rb,wb

import json
dic1={"1":"hello","2":"dfdfd"}
f=open('write.txt','w+',encoding='utf-8')
json.dump(dic1,f) #将数据序列化后写入文件,如果数据是中文,改变默认参数ensure_ascii=False
f.close()
f=open('write.txt')
print(json.load(f))   #将文件中的字符串反序列化打印出来
f.close()

picle

优点:所有python中的数据类型都可以转换成字符串形式

picle序列化的内容只有python能够理解,且部分反序列化依赖代码

方法与json相同,不同点是picel可以序列化任何数据类型,包括集合

shelve

优点:操作简单,序列化句柄直接操作,方便

缺点:不支持同一时间多个应用对同一文件进行写操作,因此如果只进行读操作,就可以让selve以只读方式打开文件

import shelve
f=shelve.open('hello.txt')
f['key']={'int':10,'float':9.5,'string':'sfffff'}
f.close()
f=shelve.open('hello.txt')
print(f['key'])
f.close()

执行结果:

{'int': 10, 'float': 9.5, 'string': 'sfffff'}

 

posted @ 2020-10-18 20:35  maday  阅读(110)  评论(0)    收藏  举报