python标准库学习之pickle模块

终结者T800
• 阅读 4524

对象存在于程序运行时的内存中,当程序不再运行时或断电关机时,这些对象便不再存在。我现在想把对象保存下来,方便以后使用,这就是持久化技术
利用 python标准库中的的pickle模块可以将对象转换为一种可以传输或存储的格式。

如果希望透明地存储 python 对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化:它是一个将任意复杂的对象转成对象的文本或二进制表示的过程。

主要方法

pickle模块中有两个主要函数,它们是dump()和load()。

dump()方法

该方法的作用是实现python 对象的序列化,将 obj 保存到 file 中。
具体语法如下:

pickle.dump(obj, file[, protocol])

obj:要持久化保存的对象;
file: 将对象序列化后保存到的类文件对象;
它必须有一个可以接受单字符串作为入参的write() 方法。这个对象可以是一个以写模式打开的文件对象或者一个 StringIO 对象,或者其他任意满足条件的接口;
protocol: 可选的参数,默认为 0。0表示所序列化的对象使用可打印的ASCII码表示;1或True 表示使用老式的二进制协议;2表示使用python2.3版本引入的新二进制协议,比以前的高效;负值表示将使用可用的最高协议版本。
如果 protocol>=1,那么文件对象需要以二进制形式打开。

dumps()

具体语法为:

pickle.dumps(obj[, protocol])

返回一个字符串,而不是存入文件中。

load()

该方法用于反序列化,即将序列化的对象重新恢复成python对象。
具体语法如下:

pickle.load(file)

这个 file 必须是一个拥有一个能接收单整数为参数的 read() 方法以及一个不接收任何参数的 readline() 方法,并且这两个方法的返回值都应该是字符串。这可以是一个打开为读的文件对象、StringIO 对象或其他任何满足条件的对象。

loads()

pickle.loads(string)

从字符串中恢复对象。

Pickler()

class pickle.Pickler(file[, protocol])

可以使用该对象调用dunmp 和 load 等方法。

clear_memo()

对于相同的对象,如果不使用clear_memo()方法,那么python只会pickle一次

cPickle 模块

cPickle 是 pickle的优化版, cPickle是 C 编写的因此它可以比pickle快 1000倍。但是它不支持使用子类化的Pickler()和Unpickler()类,因为在cPickle中,这些都是不是类的功能。大多数应用程序不需要此功能,并可以受益于cPickle的改进性能。除此之外,这两个模块的接口是几乎完全相同。

用例

In [2]: try:
   ...:     import cPickle as pickle
   ...: except:
   ...:     import pickle
   ...:

In [3]: info = [1, 2, 3, 'hello']
In [4]: data1 = pickle.dumps(info)
In [5]: print data1
(lp1
I1
aI2
aI3
aS'hello'
p2
a.

In [6]: data2 = pickle.loads(data1)
In [7]: print data2
[1, 2, 3, 'hello']

In [8]: type(data1)
Out[8]: str
点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Wesley13 Wesley13
4年前
java中的序列化
一、什么是java序列化  序列化:将对象写入IO流反序列化:从IO流中恢复对象序列化机制允许将实现序列化的java对象转换为字节序列,这些字节序列可以保存在磁盘上也可以通过网络传输,字节序列也可以再恢复为原来的对象。序列化机制可以让对象不依附于程序独立存在。二、应用场景
CuterCorley CuterCorley
4年前
商业数据分析从入门到入职(8)Python模块、文件IO和面向对象
前言本文先介绍了Python中程序、模块和包的基本使用,并在此基础上介绍了Python标准库。然后详细介绍了Python中的文件IO操作,包括文本文件、二进制文件的读写和其他IO操作。最后介绍了面向对象,包括类的定义、继承的使用、鸭子类型和魔法方法。一、程序、模块和包1.自定义模块和包之前我们使用的.ipynb文件都不是纯Python文件,
Bill78 Bill78
4年前
Python中JSON的基本使用_Just do it !
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。Python3中可以使用json模块来对JSON数据进行编解码,它主要提供了四个方法:dumps、dump、loads、load。dump和dumpsdump和dumps对python对象进行序列化。将一个Python对象
Stella981 Stella981
4年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Stella981 Stella981
4年前
Python 画图
使用python的科学计算库,达到快速计算的效果。标准的Python中用列表(list)保存一组值,可以当作数组使用。但由于列表的元素可以是任何对象,因此列表中保存的是对象的指针。这样一来,为了保存一个简单的列表\1,2,3\,就需要有三个指针和三个整数对象。对于数值运算来说,这种结构显然比较浪费内存和CPU计算时间。使用numpy的a
Stella981 Stella981
4年前
Python之CSV模块
1\.CSV简介CSV(CommaSeparatedValues)是逗号分隔符文本格式,常用于Excel和数据库的导入和导出,Python标准库的CSV模块提供了读取和写入CSV格式文件的对象。1.1csv.reader对象和csv文件的读取
Stella981 Stella981
4年前
Python 中的 with 语句与上下文管理器
对象,是Python对数据的抽象概念。Python中的所有数据都是以对象或对象间的关系来实现的。(某种意义上,代码也是由对象来实现的,这与冯·诺依曼的“storedprogramcomputer”模型相一致)。每个对象都有id、type、和value。对象的id从创建之时起就不再改变,你可以把它想象成对象在内存中的地址。is运算符就是
Wesley13 Wesley13
4年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
Stella981 Stella981
4年前
Protostuff一键序列化工具、Protobuf JAVA实现
前言:由于搜集网络,发现Protostuff相关内容较少,故此发布这篇文章1. 何为序列化序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。序列化使其他代码可以查看或修改