笔记-python-standard library-12.1 pickle
笔记-python-standard library-12.1 pickle
1. pickle简介
source code: Lib/pickle.py
pickle模块实质上是一个实现python对象结构序列化的二进制协议。可以“序列化”,当然也可以“反序列化“。
python中也有一些其它的模块实现类似的功能,但一般情况下序列化使用pickle:
- marshal
主要用于支持.pyc文件。考虑到扩展性以及功能性,一般情况下序列化使用Pickle。
- json
json是一种文本序列化格式,是人类可读的,而Pickle不是。
关键是json支持的Python对象类型仅限于内置类型。
1.1. 数据流格式
pickle使用的数据格式是python特定的。好处是不与其它协议冲突,坏处是其它协议不支持pickle格式。
默认情况下,pickle数据数据格式使用较高压缩率的二进制格式,当然,可以指定压缩率。
有5种协议用于序列化,越新的协议版本号越大,同样,需要新版的python。支持:
- version 0
最原始的“人类可读”版协议,与早期的python版本兼容。
- version 1
旧的二进制格式,与早期的Python兼容。
- version 2 python 2.3中引进。
- version 3 Python3.0 中引进。
- version 4 python 3.4中引进。
1.2. 模块接口
序列化使用dumps(),反序列化使用loads()。如果需要进行更多的细节控制,可以使用Pickler和Unpickler对象。
模块常量:
- pickle.HIGHEST_PROTOCOL
整数,支持协议的最高版本。
- pickle.DEFAULT_PROTOCOL
整数,默认协议版本。目前默认是3.
方法:
- pickle.dump(obj, file, protocol=None, *, fix_imports=True)
将对象序列化并写入文件句柄。
protocol,一个可选参数,整数,使用指定版本协议。
file参数必需有支持字节写入的write()方法,
fix_imports主要用于与python2的兼容,一般不用设置。
- pickle.dumps(obj, protocol=None, *, fix_imports=True)
将对象序列化并返回一个二进制对象。
- pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict")
从指定文件对象中读取序列化对象。
协议版本自动查看。
- 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模块定义了三种异常:
- exception pickle.PickleError
pickle模块异常类的基类,继承于Exception.
- exception pickle.PicklingError 序列化失败时抛出
- exception pickle.UnpicklingError 反序列化失败时抛出
1.4. class
- 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
- 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的更多相关文章
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- The Python Standard Library
The Python Standard Library¶ While The Python Language Reference describes the exact syntax and sema ...
- Python语言中对于json数据的编解码——Usage of json a Python standard library
一.概述 1.1 关于JSON数据格式 JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC 46 ...
- 《The Python Standard Library》——http模块阅读笔记1
官方文档:https://docs.python.org/3.5/library/http.html 偷个懒,截图如下: 即,http客户端编程一般用urllib.request库(主要用于“在这复杂 ...
- 《The Python Standard Library》——http模块阅读笔记2
http.server是用来构建HTTP服务器(web服务器)的模块,定义了许多相关的类. 创建及运行服务器的代码一般为: def run(server_class=HTTPServer, handl ...
- 《The Python Standard Library》——http模块阅读笔记3
http.cookies — HTTP state management http.cookies模块定义了一系列类来抽象cookies这个概念,一个HTTP状态管理机制.该模块支持string-on ...
- Python Standard Library 学习(一) -- Built-in Functions 内建函数
内建函数列表 Built-in Functions abs() divmod() input() open() staticmethod() all() enumerate() int() ord() ...
- [译]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模块为与操作系统 ...
- C++11新特性——The C++ standard library, 2nd Edition 笔记(一)
前言 这是我阅读<The C++ standard library, 2nd Edition>所做读书笔记的第一篇.这个系列基本上会以一章一篇的节奏来写,少数以C++03为主的章节会和其它 ...
- [译]The Python Tutorial#11. Brief Tour of the Standard Library — Part II
[译]The Python Tutorial#Brief Tour of the Standard Library - Part II 第二部分介绍更多满足专业编程需求的高级模块,这些模块在小型脚本中 ...
随机推荐
- C 碎片四 流程控制
前面介绍了程序中用到的一些基本要素(常量,变量,运算符,表达式),他们是构成程序的基本成分,下面将介绍C语言中流程控制的三种结构:顺序结构.分支结构.循环结构 一.顺序结构 顺序结构的程序设计是最简单 ...
- Android Service创建USB HOST通信
之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信.要使用Android的USB Host ...
- 《敏捷软件开发:原则、模式与实践(C#版)》源代码下载
Agile Software Development: Principles, Patterns and Practice (C# Edition) Source Code 这本书的经典性无需多言 ...
- base、self标签
以新的窗口打开页面 self在自己的窗口打开
- pscp no such file or directory
背景:在WINDOWS10 上传一个文件 到 Centos 7中 工具:pscp 用法: pscp.exe -C e:\tinyfox\site\wwwroot\cdms\projecttemplat ...
- AngularJS 整理学习
参考博客: https://blog.csdn.net/weixin_33178524/article/details/79179597 https://blog.csdn.net/qq_42128 ...
- Mysql数据库操作语句总结(三)
最近一段时间重新学习一下mysql命令行的用法, 这里简单记录一下 参考文章: https://www.cnblogs.com/bluealine/p/7832219.html 个人使用的是mysql ...
- 实战:ADFS3.0单点登录系列-集成MVC
本文将讲解如何让MVC应用程序与ADFS集成,完成认证的过程. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0单点登录系列-ADFS3 ...
- 【微软大法好】VS Tools for AI全攻略(3):低配置虚拟机也能玩转深度学习,无需NC/NV系列
接着上文,现在我们需要一种穷人的方法来搭建好Azure虚拟机. 思路很简单,因为AI组件的原理其实是传送了script文件和命令上去,那么我们这个虚拟机只要做好了所有的配置,那么我们就可以将它当作深度 ...
- php使用GD库实现图片水印和缩略图——封装成类
学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来 ...