序列化及反序列化

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)
View Code

 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()
View Code
1 b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.'
2 {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
3 2001
4 2033
结果

 

 

posted @ 2020-04-28 08:41  xiaofeiAI  阅读(163)  评论(0编辑  收藏  举报