序列化模块
Posted dempsey888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化模块相关的知识,希望对你有一定的参考价值。
1.序列化:把内存里的数据转化成字符串,以存到硬盘上
把字符转换成内存数据,为反序列化
用于序列化的模块有:json,pickle,shelve
一:json
# dumps把内存数据类型序列化 data = {‘age‘:18,"name":‘dempsey‘} a = json.dumps(data) print(a,type(a)) #{"age": 18, "name": "dempsey"} <class ‘str‘> # 存到文件里 f = open(‘text.json‘,‘w‘,encoding=‘utf-8‘) json.dump(data,f) # 注意:第二个参数为文件对象,并不是文件名,所以要先打开个文件 # 反序列化 data = {‘age‘:18,"name":‘dempsey‘} a = json.dumps(data) a2 = json.loads(a) print(a2,type(a2)) # {‘age‘: 18, ‘name‘: ‘dempsey‘} <class ‘dict‘> # 把文件里的字符反序列化读取到内存里 f = open("text.json",‘r‘) data2 = json.load(f) print(data2,type(data2)) #{‘age‘: 18, ‘name‘: ‘dempsey‘} <class ‘dict‘>
只是把数据类型转换成字符串存到内存里的意义?
1.把 内存数据通过网络传输共享给远程其他人
2.定义了不同语言之间的交互规则:
纯文本:不能共享复杂的数据类型
xml:可读性差,占空间大
json:可读性好,占空间小
二.pickle模块
# 把数据类型存到文件里 data1 = [1,2,3,4,5] data2 = {"name":"zdp","age":18} #pickle的dump实际上是把数据类型转成bytes类型,要用wb模式 f = open("text.pkl",‘wb‘) pickle.dump(data1,f) # 把数据类型从文件里读到内存里 f = open(‘text.pkl‘,‘rb‘) a = pickle.load(f) print(a)
总结:
json: 只能处理str, tuple, list, dict, int 类型
pickle: 支持python里所有的数据类型(包括函数), 但只能在python里使用
三.shelve模块,对pickle进行封装,只能在python中使用
json只能把一个数据类型放到一个文件里,只能一次dump,load一次
而shelve可以利用key-value模式存多个数据类型
a = [1,2,3,4] b = {"name":‘zdp‘,"age":18} f = shelve.open(‘shelve_text‘) #打开一个文件 # 持久化列表 f[‘numbers‘] = a f[‘dict‘] = b # 可以对f进行相当于字典的操作 print(list(f.keys())) print(f.get(‘numbers‘)) f.close() # [‘numbers‘, ‘dict‘] # [1, 2, 3, 4]
可以对数据类型进行重新赋值,删除操作,添加新的键值对操作。
以上是关于序列化模块的主要内容,如果未能解决你的问题,请参考以下文章
CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段