本文共 2388 字,大约阅读时间需要 7 分钟。
Pickle是 Python特有的序列化模块, 它只能用于Python, 并且可能不同版本的Python彼此都不兼容,但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不行
ps : 一般用Pickle保存那些不重要的数据,不能成功地反序列化也没关系
点我给你介绍
import pickles = { 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 pickles = {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}
dump()
import pickles=[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]
# coding:utf-8import picklewith open('a.pkl',mode='wb') as f: # 一:在python3中执行的序列化操作如何兼容python2 # python2不支持protocol>2,默认python3中protocol=4 # 所以在python3中dump操作应该指定protocol=2, 为了方便以后兼容python2的协议 pickle.dump('你好啊',f,protocol=2)with open('a.pkl', mode='rb') as f: # 二:python2中反序列化才能正常使用 res=pickle.load(f) print(res)
import jsonimport pickledic = { '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)) #print(type(ppp) # ⛅反序列化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 print(ppp2["name"],type(ppp2)) # shawn
import jsonimport pickledic = { 'type' : input}res1 = json.dumps(dic) # 报错 : TypeErrorres2 = pickle.dumps(dic) print(res2) # b'\x80\x03}q\x00X\x04\x00\x00\x00typeq\x01cbuiltins\ninput\nq\x02s.'pickle.loads(res2)["type"]() # 反序列化加括号"()"出来可以直接使用"input"函数
转载地址:http://frto.baihongyu.com/