序列化模块(sys)
序列化模块
序列化——转向一个字符串数据类型
序列——字符串
序列——字符串
应用:
把数据类型转换成字符串:
写文件
网络上传输的时候
从数据类型到字符串的过程就叫做序列化。
从字符串再转换回数据类型的过程就叫做反序列化。
写文件
网络上传输的时候
从数据类型到字符串的过程就叫做序列化。
从字符串再转换回数据类型的过程就叫做反序列化。
json 模块
dumps和loads
import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 print(type(str_dic),str_dic) #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"} #注意,json转换完的字符串类型的字典中的字符串是由""表示的 dic2 = json.loads(str_dic) #反序列化:将一个字符串格式的字典转换成一个字典 #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 print(type(dic2),dic2) #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}] str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}] list_dic2 = json.loads(str_dic) print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
注意:json的局限性很大,但是是通用的。可以在各种语言中使用。
再python中,当我们使用json去转换元组和集合时,此时就会出错。
dic = (1,2,3,4,3) big = json.dumps(dic) print(type(big),big) x = json.loads(big) print(type(x),x)
我们看到,当转换元组时python会把元组转化成列表的形式,当再反序列是我们得到的就不再是元组了,而是一个列表。
dump和load
当我们需要把数据类型存到文件或者从文件中把其中的内容转换成我需要的数据类型时,这个时候。我们就可以使用dump和load来帮助我们实现了。
列如:
import json f = open('json_file','w') dic = {'k1':'v1','k2':'v2','k3':'v3'} json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 f.close()
当我们需要再次从文件中提取出我们所存的数据类型时,我就可以使用load来帮忙。
f = open('json_file') dic2 = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 f.close() print(type(dic2),dic2)
看下结果:
pickle
pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化)注意:
使用pickle时,虽然方法和json一样。但是再打开文件和读取文件时应使用wb和rb形式打开。
对于pickle来说可以分步的去dump和load,而json不行。
shelve
特点:比较号操作。
shelve时python提供给我们的序列化工具,且只提供了一个open的工具,是用key来访问的。类似于字典的用法。
例如:
import shelve f = shelve.open('套你大象') f['key'] = {'k1:1','k2:1','k3:1','k4:1','k5:1'} f.close()
我们通过key将数据类型直接存储到文件中
这是,我们可以直接通过key直接将我们序列化的数据类型直接读取出来。
import shelve f = shelve.open('套你大象') f['key'] = {'k1:1','k2:1','k3:1','k4:1','k5:1'} f.close()
总结:
json 通用的序列化格式。
弊端:只有很少一部分数据类型能够通过json转化成字符串。
pickle
#多有的的python的数据类型都可以转化成字符串形式。
#pickle序列化的内容只有python能理解。
#且部分反序列化依赖代码
shelve
#序列化句柄
#使用句柄直接操作,非常方便。
pickle
#多有的的python的数据类型都可以转化成字符串形式。
#pickle序列化的内容只有python能理解。
#且部分反序列化依赖代码
shelve
#序列化句柄
#使用句柄直接操作,非常方便。