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'>
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}%
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>
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.%