1、序列化:
序列化:从数据类型--->字符串的过程;
反序列化:字符串--->数据类型的过程;
序列化用到的模块有json、pickle、shelve
json
#通用的序列化格式
#只有很少的一部分数据类型能够通过json转化为字符串
pickle
#所有的Python数据类型都可以转化为字符串类型
#pickle序列化的数据类型只有Python能够理解,且部分反序列化依赖Python代码
shelve
#序列化句柄
#使用序列号句柄直接操作,比较方便
2、json中有序列化方法dumps,反序列化方法loads
import json dic = {'k1':'22'} print(type(dic),dic) str_d = json.dumps(dic) print(type(str_d),str_d) dic_a = json.loads(str_d) print(type(dic_a),dic_a)
3、json中对文件内容操作的序列化操作dump,反序列化操作load
1 import json 2 dic = {'k1':'彭','k2':'广东'} 3 f = open('xuliehua','w',encoding='utf-8') 4 json.dump(dic,f,ensure_ascii=False) 5 f.close() 6 f = open('xuliehua',encoding='utf-8') 7 res = json.load(f) 8 f.close() 9 print(type(res),res)
4、pickle模块方法
pickle模块有四个功能:dumps、dump(序列化及存储功能)、loads(反序列化及读取)、load(不仅可以序列化字典、列表,可把Python里任意数据类型序列化)
pickle序列化以后是byte类型数据,一般用在Python内部使用,如果被序列化的文件要被java、js等语言读取则还是用Json,所以如果序列号是字典或列表请优先
用json。
1 import pickle 2 dic = {'k1':'v1','k2':'v2','k3':'v3'} 3 str_dic = pickle.dumps(dic) 4 print(str_dic) 5 6 dic2 = pickle.loads(str_dic) 7 print(dic2) 8 9 import time 10 struct_time1 = time.localtime(1000000000) 11 struct_time2 = time.localtime(2000000000) 12 f = open('pickle_test_file','wb') 13 pickle.dump(struct_time1,f) 14 pickle.dump(struct_time2,f) 15 f.close() 16 17 f = open('pickle_test_file','rb') 18 struct_time1 = pickle.load(f) 19 struct_time2 = pickle.load(f) 20 print(struct_time1.tm_year) 21 print(struct_time2.tm_year) 22 f.close()
1 b'x80x03}qx00(Xx02x00x00x00k1qx01Xx02x00x00x00v1qx02Xx02x00x00x00k2qx03Xx02x00x00x00v2qx04Xx02x00x00x00k3qx05Xx02x00x00x00v3qx06u.' 2 {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} 3 2001 4 2033