资讯专栏INFORMATION COLUMN

python标准库学习之pickle模块

宠来也 / 1753人阅读

摘要:利用标准库中的的模块可以将对象转换为一种可以传输或存储的格式。主要方法模块中有两个主要函数,它们是和。具体语法为返回一个字符串,而不是存入文件中。该方法用于反序列化,即将序列化的对象重新恢复成对象。除此之外,这两个模块的接口是几乎完全相同。

对象存在于程序运行时的内存中,当程序不再运行时或断电关机时,这些对象便不再存在。我现在想把对象保存下来,方便以后使用,这就是持久化技术
利用 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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38321.html

相关文章

  • python标准库学习之zipfile模块

    摘要:模块里有两个非常重要的分别是和。返回一个对象,它包括文件的详细信息。将文档内的指定文件解压到当前目录。为文件路径,为添加到文档之后保存的名称参数表示压缩方法,它的值可以是或。预留字段,当前实现总是返回。 ZipFile模块里有两个非常重要的class, 分别是 ZipFile和ZipInfo。ZipFile是主要的类,用来创建和读取zip文件,而ZipInfo是存储的zip文件的每个文...

    Magicer 评论0 收藏0
  • Python标准库学习之urllib

    摘要:本系列以为基础是的标准网络请求库。包含了网络数据请求,处理改变请求头和用户代理,重定向,认证等的函数。超时单位为秒参数必须是的实例返回值返回一个可以作为的对象。返回的个部分,分别是机制网络位置路径路径段参数查询片段。 本系列以python3.4为基础urllib是Python3的标准网络请求库。包含了网络数据请求,处理cookie,改变请求头和用户代理,重定向,认证等的函数。urlli...

    NusterCache 评论0 收藏0
  • Python基础之(十一)数据存储

    摘要:默认为或者说,是以格式保存对象如果设置为或者,则以压缩的二进制格式保存对象。但是,要小心坑试图增加一个坑就在这里当试图修改一个已有键的值时没有报错,但是并没有修改成功。要填平这个坑,需要这样做多一个参数没有坑了还用循环一下 pickle pickle是标准库中的一个模块,在Python 2中还有一个cpickle,两者的区别就是后者更快。所以,下面操作中,不管是用import pick...

    Songlcy 评论0 收藏0
  • GIL 已经被杀死了么?

    摘要:酷睿代在年取代了奔腾,主频远低于此。该词被敏捷开发团队使用较多,含义与形式会略有不同,更改已经开始将垃圾收集器的状态转到解释器,因此每个子解释器将拥有它自己的本该如此。结论死亡了吗对于单线程的应用程序,仍然存活。 showImg(https://segmentfault.com/img/remote/1460000019229774); 本文原创并首发于公众号【Python猫】,未经授...

    xietao3 评论0 收藏0
  • GIL 已经被杀死了么?

    摘要:酷睿代在年取代了奔腾,主频远低于此。该词被敏捷开发团队使用较多,含义与形式会略有不同,更改已经开始将垃圾收集器的状态转到解释器,因此每个子解释器将拥有它自己的本该如此。结论死亡了吗对于单线程的应用程序,仍然存活。showImg(https://user-gold-cdn.xitu.io/2019/5/19/16ad09f554fdf443); 本文原创并首发于公众号【Python猫】,未经授...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

宠来也

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<