序列化模块

把对象(变量)从内存中变成可存储或传输的过程称为序列化

1.json模块

  如果要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,如果有序列化为JSON表示出来的就是一个字符串,可以被所有语言读取,也可以方便的存储到磁盘或者通过网络传输

JSON和Python内置的数据类型对应如下:

JSON类型 Python类型
{} dict
[] list
"string" str
123.45 int或float
True/False True/False
null None
 1 import json
 2 dic = {"name":"abc","age":18}
 3 print(type(dic))#<class 'dict'>
 4 
 5 j = json.dumps(dic)
 6 print(type(j))#<class 'str'>
 7 
 8 f = open("序列化对象",'w')
 9 f.write(j)#等价于json.dump(dic,f)
10 f.close()
11 
12 #反序列化
13 f = open("序列化对象")
14 data = json.loads(f.read())#等价于data = json.load(f)

  1.

1 import json
2 dic = {1:"value1",2:"value2"}
3 ret = json.dumps(dic)
4 res = json.loads(ret)
5 print(dic,type(dic))#{1:'value1',2:'value2'}<class 'dict'>
6 print(ret,type(ret))#{"1":"value1","2":"value2"}<class 'str'>
7 print(res,type(res))#{'1':'value1','2':'value2'}<class 'dict'>

  2.

1 import json
2 dic = {1 : [1,2,3],2 : (4,5,'aa')}
3 ret = json.dumps(dic)
4 print(dic,type(dic))#{1:[1,2,3],2:(4,5,'aa')}<class 'dict'>
5 print(ret,type(ret))#{"1":[1,2,3],"2":[4,5,"aa"]}<class 'str'>

如果字典的值为元组,序列化后会转为列表

  3.

1 import json
2 s = {1,2,3}
3 s1 = json.dumps(s)
4 print(s1)
5 #会报错TypeError: Object of type set is not JSON serializable
6 集合类型不是可序列化的对象

  4.

1 import json
2 dic = {(1,2,3):123}
3 dic1 = json.dumps(dic)
4 print(dic1)
会报错

TypeError: keys must be str, int, float, bool or None, not tuple

字典的键必须是str,int,float,bool或None,元组不能作为键

  5.

1 import json
2 dic = {"key1":"value1","key2":"value2"}
3 with open("json_file","a") as f:
4     json.dump(dic,f)
5     json.dump(dic,f)
6 
7 with open("json_file","r") as f:
8     dic = json.load(f)
不支持连续的存取

dumps和loads

  在内存中做数据转换:

    dumps  数据类型转成字符串  #序列化

    loads   字符串转成数据类型  #反序列化

dump和load

  直接将数据类型写入文件,直接从文件中读出数据类型

    dump  数据类型写入文件  #序列化

    load  从文件读出数据类型  #反序列化

 

 

2.pickle模块

  1.支持在python中几乎所有的数据类型

  2.dumps序列化的结果只能是字节

  3.只能在python中使用

  4.在和文件操作的时候,需要用rb,wb的模式打开文件

  5.可以多次dump和load

 

posted @ 2018-08-22 21:38  小鸽鸽OvO  阅读(581)  评论(0编辑  收藏  举报