序列化模块
Posted whylinux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化模块相关的知识,希望对你有一定的参考价值。
# 序列化模块 # 序列化 都是转向一个字符串数据类型的过程 # 序列 ---- 这里说的就是字符串 # 可以进行序列化的东西 # 数字、字符串、列表、字典、元组(元组的序列化其实是转换成列表后再去进行序列化的) # 从数据类型 到 字符串的过程 就叫做序列化 # 从字符串 到 数据类型的过程 就叫做反序列化 # 序列化模块 # json 通用的序列化格式, 能被json序列化的数据类型是数字、字符串、字典 # 只有很少的一部分数据类型(数字、字符串、字典)能够通过josn换成字符串, # dumps 序列化方法 # loads 反序列化方法 # pickle (应用的领域,例如游戏中,退出后,当再次登录时还是在上次的位置) # 所有python中的数据类型都可以被序列化 # pickle序列化的内容只有python能理解 # 且部分反序列化依赖代码 # shelve python3中新出现的一种序列化方式 # 序列化句柄 # 使用句柄直接操作,非常方便 # json dumps 序列化方法 dic = {‘k1‘:‘v1‘} import json str_d = json.dumps(dic) # 将字典进行序列化 print(type(str_d), str_d) # <class ‘str‘> {"k1": "v1"} # json loads 反序列化方法 dic_d = json.loads(str_d) # 反序列化 print(type(dic_d), dic_d) # <class ‘dict‘> {‘k1‘: ‘v1‘} # json dump 一次性的序列化后写入文件 dic = {1 : ‘中国‘, 2:‘b‘} f = open(‘fff‘, ‘w‘, encoding=‘utf-8‘) # ensure_ascii=False 使得在文件中的中国是中国 json.dump(dic, f, ensure_ascii=False) # 将字典序列化成字符串后,写入到了文件中 f.close() # json load 一次性的读出后反序列化 f = open(‘fff‘, encoding=‘utf-8‘) res = json.load(f) # 从文件中将字符串反序列化 f.close() print(type(res), res) # <class ‘dict‘> {‘2‘: ‘b‘, ‘1‘: ‘a‘} # pickle 所有python中的数据类型都可以被序列化 # 方法 # dumps # loads # dump # load import time import pickle # pickle dumps 序列化,变成了二进制数据 dic = {1:‘v1‘, ‘k2‘:‘v2‘} str_dic = pickle.dumps(dic) # 将字典序列化,变成了二进制数据 print(str_dic) # b‘x80x03}qx00(Kx01Xx02x00x00x00v1qx01Xx02x00x00x00k2qx02Xx02x00x00x00v2qx03u.‘ # pickle loads 反序列化,二进制数据变成数据类型 dic2 = pickle.loads(str_dic) # 将数据进行反序列化 print(dic2) # {1: ‘v1‘, ‘k2‘: ‘v2‘} struct_time1 = time.localtime(1000000000) struct_time2 = time.localtime(2000000000) f = open(‘pickle_file‘, ‘wb‘) # 因为pickle序列化后的是二进制bytes类型,所以要往文件写时,要以b打开,bytes打开 # pickle dump # pickle.dump(struct_time1, f) pickle.dump(struct_time2, f) f.close() # pickle load # load可以分次读出然后反序列化 f = open(‘pickle_file‘, ‘rb‘) struct_time1 = pickle.load(f) struct_time2 = pickle.load(f) print(struct_time1.tm_year) # 2001 print(struct_time2.tm_year) # 2033 f.close() # shelve # 序列化写入文件时,他还会创建bak、dat、dir文件 # 这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。 # 所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读的方式打开DB import shelve f = shelve.open(‘shelve_file‘) f[‘key‘] = {‘int‘: 10, ‘float‘:9.0} # 直接对文件句柄进行操作,序列化操作写入文件,索引为‘key‘ f.close() f1 = shelve.open(‘shelve_file‘) existing = f1[‘key‘] # 直接读取文件的‘key‘位置的序列化的内容,然后反序列化得到 f1.close() print(existing) # {‘int‘: 10, ‘float‘: 9.0}
以上是关于序列化模块的主要内容,如果未能解决你的问题,请参考以下文章
CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段