序列化模块

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

1.json模块

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

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

JSON类型Python类型
{}dict
[]list
"string"str
123.45int或float
True/FalseTrue/False
nullNone
 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

 

转载于:https://www.cnblogs.com/s593941/p/9520554.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值