博客
关于我
python之pickle模块
阅读量:261 次
发布时间:2019-03-01

本文共 2388 字,大约阅读时间需要 7 分钟。

python之pickle模块

文章目录

img

引入

pickle的使用问题与局限性

Pickle是 Python特有的序列化模块, 它只能用于Python, 并且可能不同版本的Python彼此都不兼容,但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不行

ps : 一般用Pickle保存那些不重要的数据,不能成功地反序列化也没关系

一.序列化与反序列化介绍

点我给你介绍

二.Pickle的使用

1.简单使用

  • pickle 将数据存成 Bytes 类型
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}

2.写入文件序列化与反序列化

  • 序列化 : .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} 

3.简单序列化与反序列化 (提供直接写入文件功能)

  • 序列化 : 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] 

4.python2与python3的pickle兼容性问题

# 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)

三.Pickle 与 json 对比

1.json 格式

  • 通用格式, 任何语言都支持, 并且都可以解析
  • 数据类型有限 : 字典, 列表, 布尔

2.pickle 格式

  • 只适用于 Python, 序列化之后拿到的返回值是 Bytes 类型, 其他语言识别不了
  • 但可以支持 Python 中的任意类型

3.两种格式序列化与反序列化对比

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

4.pickle 可序列化任意类型小示例

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/

你可能感兴趣的文章
夜光带你走进JavaScript(五十二)擅长的领域
查看>>
夜光带你走进JavaScript(五十四)擅长的领域
查看>>
夜光带你走进JavaScript(五十五)擅长的领域
查看>>
Java工程师培训课(十三【可以坚持看完前十二章说明毅力尚可~~】)
查看>>
Java工程师培训课(十七【新的领域】)
查看>>
夜光带你走进 Ajax(四)
查看>>
夜光带你走进python开发 (五)传奇语言
查看>>
夜光精讲 Opentcs 三大算法(二)任务分配算法
查看>>
夜光精讲 Opentcs 三大算法(十三)调度算法
查看>>
夜光精讲 Opentcs 通信系统
查看>>
夜光:基于 SpringMVC 框架的图片视频库系统的设计与实现 (一)
查看>>
夜光:计算机网络笔记(七)
查看>>
夜光带你走进 C语言(五十八)
查看>>
夜光带你走进 C语言(八十五)
查看>>
python作业之JSON数据的处理
查看>>
Aid Learning0.87F3安装vue.js
查看>>
Springboot添加log4j日志
查看>>
Could not resolve host: mirrorlist.centos.org; 未知的错误
查看>>
导入工程时出现错误
查看>>
第一章:QT的概述
查看>>