Python中的序列化 -- JSON和PICKLE

JSON

JSON 支持字典列表两种数据类型的序列化


1.dumps 和 loads

dumps 和 loads 序列化对象,json可以将其序列化为字符串

>>> import json
>>> d = {'a':1,'b':2,'c':3}
>>> d_j = json.dumps(d)
>>> d_j
'{"c": 3, "b": 2, "a": 1}'
>>> type(d_j)
<class 'str'>
>>> d_r= json.loads(d_j)
>>> d_r
{'c': 3, 'b': 2, 'a': 1}
>>> type(d_r)
<class 'dict'>
json序列化:dumps
恢复:loads
d:dict
d_j:str

2.dump 和 load

dump和load 是序列化对象到文件

>>> import json
>>> d = {'a':1,'b':2,'c':3}
>>> d_d = json.dumps(d)
>>> d_d,type(d_d)
('{"b": 2, "a": 1, "c": 3}', <class 'str'>)
>>> with open('json.txt','w') as f:
...     f.write(d_d)
... 
24
>>> with open('json2.txt','w') as f:
...     json.dump(d,f)
... 
>>> with open('json.txt','r') as f:
...     data1 = json.load(f)
... 
>>> data1
{'b': 2, 'a': 1, 'c': 3}
>>> with open('json2.txt','r') as f:
...     data2 = json.load(f)
... 
>>> data2
{'b': 2, 'a': 1, 'c': 3}
cat json.txt [18:45:19]
输出:{"b": 2, "a": 1, "c": 3}%
序列化并写入文件:dump
读取:load
d:dict
f:txt

pickle

pickle除了可以序列化字典、列表、元组等对象外,还可以序列化自定义对象,pickle可以将其序列化为字节流


1.dumps 和 loads

将对象序列化成一个字节流

>>> import pickle
>>> d = {'a':1,'b':2,'c':3}
>>> d_p = pickle.dumps(d)
>>> d_p,type(d_p)
(b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00cq\x02K\x03X\x01\x00\x00\x00
bq\x03K\x02u.', <class 'bytes'>)
>>> d_r = pickle.loads(d_p)
>>> d_r,type(d_r)
({'a': 1, 'c': 3, 'b': 2}, <class 'dict'>)
>>> class Dog:
...     def __init__(self,name):
...         self.name=name
>>> dog = Dog('bob')
>>> dog_p = pickle.dumps(dog)
>>> dog_p
b'\x80\x03c__main__\nDog\nq\x00)\x81q\x01}q\x02X\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00b
obq\x04sb.'
>>> pickle.loads(dog_p)
<__main__.Dog object at 0x7ffff7e9b6d8>
json序列化:dumps
恢复:loads
d:dict
d_p:b
2.dump 和 load

注意写入和读取文件都需要使用 b 二进制模式。

>>> d = {'a':1,'b':2,'c':3}
>>> with open('pickle.txt','wb') as f:
...     pickle.dump(d,f)
... 
>>> with open('pickle.txt','rb') as f:
...     d_r = pickle.load(f)
... 
>>> d_r
{'a': 1, 'c': 3, 'b': 2}
cat pickle.txt 
输出:}q(XaqKXcqKXbqKu.%
序列化并写入文件:dump
读取:load
d:dict
f:txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值