Oracle 系统管理 - Linux 系统 - Backtrack 5 - 安全 - Juniper 技术 - Cisco 技术 - 思科模拟器 - Cisco 认证 - Cisco ios 下载

您现在的位置是:Docker > Python运维 > python 序列化和压缩

python 序列化和压缩

时间:2018-06-07 14:07  来源:未知  阅读次数: 复制分享 我要评论

什么时候使用序列化?

比如,我有一个很复杂的数据结构(类似字典,key和value是python的基本对象),我想把它存在数据库中。你准备怎么做,一项项拆分然后分别存储吗?答案,no。

现在可以用序列化来做,把这个数据结构直接转化成字节串,存在数据库中。恢复时,直接取出这个字节串,恢复字符串即可。

常用的是marshal和cPickle模块。

他们都是使用dump,dumps,load和loads方法。有专业测试说,marshal的速度要比cPickle快,但是也不尽然,cPickle是C写的,也超快,而且如果存在较长的字符串时,cPickle反而更快。

同时,cPickle可以与gzip一同使用,转换后压缩到最短的字节串,节省空间,进行存储。

 

复制代码
import cPickle,gzip
def save(filename,*objects):
    fil 
= gzip.open(filename,'wb')
    
for obj in objects:
        cPickle.dump(obj,fil,proto
=2)
    fil.close()

def load(filename):
    fil 
= gzip.open(filename,'rb')
    
while True:
        
try:
            yeild cPickle.load(fil)
        
except EOFError:break
    fil.close()
复制代码

比如处理45000个字符串的列表,cPickle在dump时使用协议0后,产生的磁盘文件大小为972KB,协议2则只需716KB。如果同时使用了gzip和协议2,产生的文件为268KB,但是协议0的压缩实际上是最好的,经测试,协议0和gzip产生的文件为252KB。

相关资讯