概述

模块Pickle实现了对一个 Python 对象结构的二进制的序列化和反序列化。  即当Python程序持续运行一些字符串、列表字典、甚至自定义的类等数据对象,需要持久化存储,即存储在磁盘中,防止运行在内存中,因断电等情况丢失数据。那么Pickle模块就派上用场了,它可以将对象转换为一种可以传输或存储的格式。python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

与JSON模块的比较

可以看到pickle模块和看似相似,但其还是有着本质的不同,即:

  • JSON 是一个文本序列化格式(它输出 unicode 文本,尽管在大多数时候它会接着以 utf-8 编码),而 pickle 是一个二进制序列化格式;

  • JSON是字面量可读的,而pickle不是(可以类比base64的不可读性);

  • JSON是可互操作的,在Python系统之外广泛使用,而pickle则是Python专用的;

序列化与反序列化

通过二进制的方式读写目标存储文件,并利用dump序列化数据对象,load反序列化数据对象

D = {'name': 'bob','major': {'english','math'},'d': [1, 2, 3, 4, 5, 6, 7]
}with open('D.pik', 'wb') as f:pickle.dump(D, f)with open('D.pik', 'rb') as f:D = pickle.load(f)print(type(D))print(D)
复制代码

示例结果:

<class 'dict'>
{'name': 'bob', 'major': {'english', 'math'}, 'd': [1, 2, 3, 4, 5, 6, 7]}
复制代码

当然我们也可以序列化到内存(字符串格式保存),然后对象可以以任何方式处理如通过网络传输


pik = pickle.dumps(D)
print(pik)D = pickle.loads(pik)
print(type(D))
print(D)
复制代码

示例结果:

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00bobq\x02X\x05\x00\x00\x00majorq\x03cbuiltins\nset\nq\x04]q\x05(X\x07\x00\x00\x00englishq\x06X\x04\x00\x00\x00mathq\x07e\x85q\x08Rq\tX\x01\x00\x00\x00dq\n]q\x0b(K\x01K\x02K\x03K\x04K\x05K\x06K\x07eu.'
<class 'dict'>
{'name': 'bob', 'major': {'english', 'math'}, 'd': [1, 2, 3, 4, 5, 6, 7]}
复制代码

cPickle

cPickle包的功能和用法与pickle包几乎完全相同 (其存在差别的地方实际上很少用到),不同在于cPickle是基于c语言编写的,具有更好的性能,对于大多数应用程序,推荐使用该模块。对于上面的例子,如果想使用cPickle包,我们都可以将import语句改为import cPickle as pickle进行使用。

转载于:https://juejin.im/post/5cf6790c5188253b2441283a

Python3内置模块之Pickle和cPickle数据持久化方法小结相关推荐

  1. python3 jason 、pickle 和cpickle

    python JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写.JSON的数据格式其实就是python里面的字典格式,里面可以包含 ...

  2. iOS中常用的四种数据持久化方法

    iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults s ...

  3. 四种数据持久化方式(上) :属性列表与归档解档

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹. iOS开发中 ...

  4. iphone开发中数据持久化之——属性列表序列化(一)

    数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式.本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号.对象归档化以及 ...

  5. CH7-HarmonyOS数据持久化

    文章目录 前言 目标 1.创建Data Ability 创建Data 实现UserDataAbility URI介绍 2.文件存储 打开文件 访问Data 3.关系型数据库 基本概念 数据库的增删改查 ...

  6. python核心模块之pickle和cPickle讲解

    pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言说识别.要和其他语言交互,可以使用内置的json包使用pickle模块你可以把 Python 对象直接保 ...

  7. python变量持久化_Python 数据持久化:JSON

    Python 数据持久化:JSON 编程派微信号:codingpy 淡蓝色字体可以直接点击查看 上周更新的<Think Python 2e>第14章讲述了几种数据持久化的方式,包括dbm. ...

  8. 使用pickle模块序列化数据,优化代码

    使用pickle模块序列化数据,优化代码 pickle是Python标准库中的一个二进制序列化和反序列化库. 可以以二进制的形式将数据持久化保存到磁盘文件中.可以将数据和代码分离,提高代码可读性和优雅 ...

  9. python学习总结----内置函数及数据持久化

    python学习总结----内置函数及数据持久化 抽象基类(了解)- 说明:- 抽象基类就是为了统一接口而存在的- 它不能进行实例化- 继承自抽象类的子类必须实现抽象基类的抽象方法 - 示例:from ...

最新文章

  1. H3C TFTP操作示例
  2. Vue2.0增删改查案例(Vue+Less+LocalStorage)
  3. 改善Python程序的91个建议(二)
  4. 吴恩达|机器学习作业7.0.k-means聚类
  5. IDEA 分享项目到 Git@OSC/GitHub
  6. maven 从入门到实战
  7. 小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model
  8. python画图代码-Python实战小程序利用matplotlib模块画图代码分享
  9. python3计算运行时间_性能分析之代码运行时间计算——Python timeit 模块 介绍
  10. 最佳 3D 建模软件
  11. 微信emoji表情编码 、MySQL 存储 emoji 表情符号字符集
  12. java哨兵模式_哨兵模式详解
  13. Python小白的飞桨之旅
  14. ad room 拷贝
  15. 一个简单的例子来理解监督学习和非监督学习及其区别
  16. 利用python-docx和docxcompose实现word合并,自动化办公
  17. 微信修改基本配置信息
  18. BDP荧光染料BODIPY FL-PEG2-COOH/carboxylic acid/羧基羧酸,Ex/Em(nm)503/509
  19. UEFI启动模式下, 双硬盘安装UBuntu16.04与Win10双系统
  20. Fabrie:PPT有风险,设计师请停用

热门文章

  1. 20145234黄斐《Java程序设计》第十周
  2. loadruner中加中Java_Script
  3. 50 xen虚拟化技术基础、xen虚拟化技术进阶
  4. Web应用NLB群集
  5. 从前台页面取参数到sql的like中比较时参数的预处理
  6. MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构
  7. WCF服务创建与使用(双工模式)
  8. 微信上传图片 41005 缺少多媒体文件
  9. squid服务器的代理
  10. nginx-lua-openresty-graphicsmagick 下载远程图片,本地缩图红缓存加水印