笔记-python-standard library-12.1 pickle

1.      pickle简介

source code: Lib/pickle.py

pickle模块实质上是一个实现python对象结构序列化的二进制协议。可以“序列化”,当然也可以“反序列化“。

python中也有一些其它的模块实现类似的功能,但一般情况下序列化使用pickle:

  1. marshal

主要用于支持.pyc文件。考虑到扩展性以及功能性,一般情况下序列化使用Pickle。

  1. json

json是一种文本序列化格式,是人类可读的,而Pickle不是。

关键是json支持的Python对象类型仅限于内置类型。

1.1.    数据流格式

pickle使用的数据格式是python特定的。好处是不与其它协议冲突,坏处是其它协议不支持pickle格式。

默认情况下,pickle数据数据格式使用较高压缩率的二进制格式,当然,可以指定压缩率。

有5种协议用于序列化,越新的协议版本号越大,同样,需要新版的python。支持:

  1. version 0

最原始的“人类可读”版协议,与早期的python版本兼容。

  1. version 1

旧的二进制格式,与早期的Python兼容。

  1. version 2              python 2.3中引进。
  2. version 3              Python3.0 中引进。
  3. version 4              python 3.4中引进。

1.2.    模块接口

序列化使用dumps(),反序列化使用loads()。如果需要进行更多的细节控制,可以使用Pickler和Unpickler对象。

模块常量:

  1. pickle.HIGHEST_PROTOCOL

整数,支持协议的最高版本。

  1. pickle.DEFAULT_PROTOCOL

整数,默认协议版本。目前默认是3.

方法:

  1. pickle.dump(obj, file, protocol=None, *, fix_imports=True)

将对象序列化并写入文件句柄。

protocol,一个可选参数,整数,使用指定版本协议。

file参数必需有支持字节写入的write()方法,

fix_imports主要用于与python2的兼容,一般不用设置。

  1. pickle.dumps(obj, protocol=None, *, fix_imports=True)

将对象序列化并返回一个二进制对象。

  1. pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict")

从指定文件对象中读取序列化对象。

协议版本自动查看。

  1. pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict")

对应于dumps。

1.2.1.   代码案例

import pickle

from json import load

a = pickle.HIGHEST_PROTOCOL

print(a)

a = pickle.DEFAULT_PROTOCOL

print(a)

with open('nums.txt', 'r', encoding='utf-8') as fi:

lisa = load(fi)

print(len(lisa))

file_a = 'pickle_a.txt'

with open(file_a, 'wb+') as fi:

pass

pickle.dump(lisa,fi)

file_a = 'pickle_a.txt'

with open(file_a, 'rb+') as fi:

pass

pickle.dump(lisa,fi)

1.3.    异常

pickle模块定义了三种异常:

  1. exception pickle.PickleError

pickle模块异常类的基类,继承于Exception.

  1. exception pickle.PicklingError  序列化失败时抛出
  2. exception pickle.UnpicklingError 反序列化失败时抛出

1.4.    class

  1. class pickle.Pickler(file, protocol=None, *, fix_imports=True)

This takes a binary file for writing a pickle data stream.

methods:

dump(obj) 将obj pickle化并写入file

  1. class pickle.Unpickler(file, *, fix_imports=True, encoding="ASCII", errors="strict")

This takes a binary file for reading a pickle data stream.

load() 从文件句柄中读取pikled对象并反序列化。返回反序列化后的对象。

1.5.    pickled 和unpickled范围

下面这些对象是可以序列化和反序列化的。

None, True, and False

integers, floating point numbers, complex numbers

strings, bytes, bytearrays

tuples, lists, sets, and dictionaries containing only picklable objects

functions defined at the top level of a module (using def, not lambda)

built-in functions defined at the top level of a module

classes that are defined at the top level of a module

instances of such classes whose __dict__ or the result of calling __getstate__() is picklable (see section Pickling Class Instances for details).

笔记-python-standard library-12.1 pickle的更多相关文章

  1. Python Standard Library

    Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...

  2. The Python Standard Library

    The Python Standard Library¶ While The Python Language Reference describes the exact syntax and sema ...

  3. Python语言中对于json数据的编解码——Usage of json a Python standard library

    一.概述 1.1 关于JSON数据格式 JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC 46 ...

  4. 《The Python Standard Library》——http模块阅读笔记1

    官方文档:https://docs.python.org/3.5/library/http.html 偷个懒,截图如下: 即,http客户端编程一般用urllib.request库(主要用于“在这复杂 ...

  5. 《The Python Standard Library》——http模块阅读笔记2

    http.server是用来构建HTTP服务器(web服务器)的模块,定义了许多相关的类. 创建及运行服务器的代码一般为: def run(server_class=HTTPServer, handl ...

  6. 《The Python Standard Library》——http模块阅读笔记3

    http.cookies — HTTP state management http.cookies模块定义了一系列类来抽象cookies这个概念,一个HTTP状态管理机制.该模块支持string-on ...

  7. Python Standard Library 学习(一) -- Built-in Functions 内建函数

    内建函数列表 Built-in Functions abs() divmod() input() open() staticmethod() all() enumerate() int() ord() ...

  8. [译]The Python Tutorial#10. Brief Tour of the Standard Library

    [译]The Python Tutorial#Brief Tour of the Standard Library 10.1 Operating System Interface os模块为与操作系统 ...

  9. C++11新特性——The C++ standard library, 2nd Edition 笔记(一)

    前言 这是我阅读<The C++ standard library, 2nd Edition>所做读书笔记的第一篇.这个系列基本上会以一章一篇的节奏来写,少数以C++03为主的章节会和其它 ...

  10. [译]The Python Tutorial#11. Brief Tour of the Standard Library — Part II

    [译]The Python Tutorial#Brief Tour of the Standard Library - Part II 第二部分介绍更多满足专业编程需求的高级模块,这些模块在小型脚本中 ...

随机推荐

  1. JAVA中面向对象

    一.方法: 1.方法概述: 在JAVA中,方法就是用来完成解决某件事情或实现某个功能的办法. 2.方法的语法格式: 修饰符  返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,.....){ ...

  2. flask之jinja2模板语言

    一.jinja2简单介绍 Jinja2是Python里一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能.其中最显著的一个是增加了沙箱执行功能和可选的 ...

  3. Django--对表的操作

    一丶多表创建 1.创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之 ...

  4. css禁止文字被选中

    有时候,为了让用户有更好的体验,需要禁用掉文本选中功能 比如:使用a标签模拟按钮,如果不禁用掉文本选中功能,那么双击时会选中文字,用起来很不爽. 多数情况下,只需要使用CSS样式就可以实现这个功能啦: ...

  5. 《Python高效开发实战》实战演练——开发Django站点1

    6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程.本节通过建立一个消息录入页面演示Django的开发流程及相关技术. 6.12.1  建立项目 在进行D ...

  6. 编译安装PHP-7.1.8

    安装依赖包: 1.安装yasm cd /usr/local/src tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make make ins ...

  7. DB2数据库备份还原

    恢复及备份NC DB2数据库步 一. 安装DB2数据库 解压db2v9.5ins.rar安装,在写此文档时客户一般用的是9.5: 注意不要将db2安装到系统盘: 二. Windows版本 1.数据库备 ...

  8. Linux下安装maven和nexus

    Linux下安装maven1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令: 2.进入下载 ...

  9. POJ 3614 Sunscreen(贪心,区间单点匹配)

    把牛的SPF看作一个区间,防晒霜看作点.一个点可以匹配C[i]次,问最大匹配数.可以用图论做. 也可以贪心.贪心的思想是,把区间和点排序以后,考虑最左边的点,加入和这个点相交的区间, 并排除出界的区间 ...

  10. LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)

    题意即求一个最小顶点覆盖. 对于没有孤立点的图G=(V,E),最大独立集+最小顶点覆盖= V.(往最大独立集加点) 问题可以变成求树上的最大独立集合. 每个结点的选择和其父节点选不选有关, dp(u, ...