在之前的python系列推文中,我们介绍了文件读写系列函数,也介绍了python中的很多原生数据类型,这是每个学习python语言的人都应该掌握的知识。但是,如果逐渐将数据处理工作转移到python中,就会面临一个首要问题——如何妥善保存python中生成的数据,比如一个列表和几个字典。许多人会选择将数据写入文本文档,然后在使用时读入。这当然是一个解决方案,但并不“优雅”。今天我们将介绍一种用python读写数据对象的优雅方式:pickle模块

对象的序列化和反序列化

我们曾经提到过,python中所有数据类型的实例化都可以看作一个对象,通常是一个逻辑实体,比如类列表,以列表的形式给出。莫尔斯电码字典,以字典的形式给出,也是一个对象。当我们想要将信息存储在一个列表中以供下一步工作使用时,我们可以使用文件读写功能来完成它,例如:

classlist =

withopen asf:

forname inclasslist:

f.write

通过使用读写函数,我们将列表的内容写入名为classlist的列表。下次用的时候再读一遍。

但是python有一种特殊的读写python对象的方法,就是pickle模块,用来解决对象的序列化和反序列化。序列化是指将python对象转换成特殊的二进制字符串,并以二进制形式写入文件,而反序列化是指读取二进制文件,并将其转换回对象本身。这样做有什么好处?最明显的是它的存储、读写速度会很快,后面我们会举例说明。其次,创建一个特殊的对象数据文件可以防止数据被意外修改而引起问题。

Pickle模块在标准库中,很容易引入pickle模块。

import泡菜

泡菜垃圾场

pickle模块的转储方法用于将对象转换为二进制存储文件。现在我们序列化并保存一个长度为100的列表。

importrandom

import泡菜

a =

with open asf:

pickle.dump

可以看出,不像一般的文件读写,我们的读写模式是wb,也就是二进制模式写。pickle.dump方法接收两个必要的参数,第一个是要序列化的对象,第二个是二进制文件句柄。执行后,在当前的工作目录中将会有一个名为ist.pkl的额外文件。需要注意的是,pkl只是一个形式后缀,其他任何字符都可以写。但是,为了显示它是一个pickle序列化数据对象,我们使用pkl作为标记。

泡菜负荷

有读书就有读书。将pkl文件作为对象读取使用pickle模块的转储方法。现在我们将读取刚刚存储的数据文件

with open asf:

abak = pickle.load

这样,您可以反序列化pkl文件,并将其转换为python列表对象。

速度更快,体积更小

在第一部分中,我们提到使用pickle读写对象更有效,并且我们使用时间模块来验证它

在:重要时间

in:a =

In : withopen asf:

...:starttime = time.time

...* fornum ina:

...:f.write+ 'n ')

...:filetime = time.time - starttime

...:

在:文件时间

出局: 0.32804441452026367

In : withopen asf:

...:starttime = time.time

...:pickle.dump

...:pkltime = time.time - starttime

...:

在中:pkltime

输出: 0.10946011543273926

可以看出,对于一个长度为10万的列表对象的相同读写,使用文件读写功能的时间是使用pickle模块的三倍以上,文件对象越大,差距就越大。

我们可以检查这两个文件的大小。filewrite.txt是1980kb,而pklwrite.pkl只有880kb。打包成rar文件后,大小分别为863kb和780kb。这表明序列化对象也减少了空数据存储的数量。使用pickle模块存储python数据对象既节省时间又空

文字编辑:赵

技术编辑:刘贝贝

关于我们

微信微信官方账号“Crawler Club”分享实用stata命令,欢迎转载和奖励。爬虫俱乐部是由李春涛教授带领的研究生和本科生组成的大数据分析和数据挖掘团队。

提交要求:

1)必须是原创,禁止抄袭;

2)一定要准确,详细,有举例和截图;

注意事项:

1)所有投稿都会经过微信官方账号运营团队成员审核,审核通过后才能录用。一旦被录用,作者将在推特上签名,并获得奖励。

2)请在邮件中注明提交,邮件名称为“提交”+“推文名称”。

3)应读者要求,现提供付费问答服务。如果遇到关于stata分析数据的问题,可以在微信官方账号里问,只需要付一点小报酬。我们会在后面的推文中回答他们。

1.《pickle pickle 更快的数据储存方式》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《pickle pickle 更快的数据储存方式》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1702741.html