Pickle是 Python特有的序列化模塊, 它只能用於Python, 而且可能不一樣版本的Python彼此都不兼容,可是pickle的好處是能夠存儲Python中的全部的數據類型,包括對象,而json不行html
ps : 通常用Pickle保存那些不重要的數據,不能成功地反序列化也不要緊python
Pickle是Python的內置模塊👈點我給你介紹json
import pickle s = {1,2,3,4} print(pickle.dumps(s)) # b'\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03K\x04e\x85q\x02Rq\x03.' b = b'\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03K\x04e\x85q\x02Rq\x03.' print(pickle.loads(b)) # {1, 2, 3, 4}
.dumps()
import pickle s = {1, 2, 3, 4, 5, } res = pickle.dumps(s) with open('db.pkl', 'wb', )as f: f.write(res)
loads()
with open('db.pkl', 'rb')as f: data = f.read() dic = pickle.loads(data) print(res,type(res)) # {1, 2, 3, 4, 5} <class 'set'>
dump()
import pickle s=[1,2,3,4,5] with open('db.pic','wb')as f: pickle.dump(s,f)
load()
with open('db.pic','rb')as f: res = pickle.load(f) print(res,type(res)) # [1, 2, 3, 4, 5] <class 'list'>
import json import pickle dic = {'name' : 'shawn'} ⛅序列化 jjj = json.dumps(dic) ppp = pickle.dumps(dic) print(jjj) # {"name": "shawn"} print(ppp) # b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x05\x00\x00\x00shawnq\x02s.' print(type(jjj)) # <class 'str'> print(type(ppp) # <class 'bytes'> ⛅反序列化 jjj2 = json.loads('{"name": "shawn"}') ppp2 = pickle.loads(b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x05\x00\x00\x00shawnq\x02s.') print(jjj2) # {'name': 'shawn'} print(ppp2) # {'name': 'shawn'} print(jjj2["name"],type(jjj2)) # shawn <class 'dict'> print(ppp2["name"],type(ppp2)) # shawn <class 'dict'>
import json import pickle dic = {'type' : input} res1 = json.dumps(dic) # 報錯 : TypeError res2 = pickle.dumps(dic) print(res2) # b'\x80\x03}q\x00X\x04\x00\x00\x00typeq\x01cbuiltins\ninput\nq\x02s.' pickle.loads(res2)["type"]() # 反序列化加括號"()"出來能夠直接使用"input"函數