首页 » InfoTech »

使用pickle模块对python对象进行序列化

2018年9月13日 / 15次阅读
Python

打开支付宝首页,搜索“529018372”,即可领取红包!可重复领。

特色图片

pickle模块是Python自带的一个标准模块,专用于Python各种对象的序列化和反序列化,可用于Python内置的各种数据对象(Python中一切都是对象),也可用于程序员自定义的类和对象。

pickle是python专用的,其序列化之后的数据格式也是python独有,外部程序一般解不开(除非按照python pickle的数据标准编程)。

我们主要会用到pickle模块的load,loads,dump,dumps这4个函数。load和dump两个函数,是将对象序列化存储到二进制文件中,和从二进制文件中提取对象;loads和dumps这两个函数,是在程序运行的内存中操作。

将变量直接在内存中序列化:

>>> list1 = [1,2,3,4,5]
>>> k = pickle.dumps(list1)
>>> k
b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'
>>>
>>> type(k)
<class 'bytes'>
>>>
>>> dict1 = {'a':1,'b':2,'c':3,'d':4}
>>> p = pickle.dumps(dict1)
>>> p
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02X\x01\x
00\x00\x00cq\x03K\x03X\x01\x00\x00\x00dq\x04K\x04u.'
>>>
>>> type(p)
<class 'bytes'>

bytes是python内置的二进制对象。

下面的代码,我们进行反序列化,将存储在内存变量中的对象还原:

>>> list2 = pickle.loads(k)
>>> list2
[1, 2, 3, 4, 5]
>>> dict2 = pickle.loads(p)
>>> dict2
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

接下来,我们测试将对象存储在文件中,并将文件中的对象提取出来:

>>> with open('d:\\pytest\\test.pickle', 'wb') as f:
...     pickle.dump(dict2, f)
...
>>>
>>> with open('d:\\pytest\\test.pickle', 'rb') as g:
...     dd = pickle.load(g)
...
>>> dd
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>>

f和g分别是写入和读出的文件句柄。(推荐:优雅地使用Python的with as语句

用户自定的类和对象,均可以使用相同的方法进行序列化存储和发序列化。

注意:可以直接将一个类定义序列化,反序列化后,还是一样的按照新赋值的名称直接使用创建对象。

本文链接:http://www.maixj.net/ict/python-pickle-18890
云上小悟 麦新杰(QQ:1093023102)

相关文章

评论是美德

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top