压缩序列化模块

我使用了泡菜,发现该文件以文本格式保存。我想知道
是否有人熟悉良好的紧凑型现场模块
可用的可节省压缩格式...或可能是意见
关于制作自定义方法的聪明方法?欣赏它!我是一个
有点N00B,但一直在环顾四周。我找到了一个序列化。
但这似乎是过度的。
标记

# 回答1


马克写道,2008年11月17日上午10:47:
好吧,这是一个想法:创建一个zip文件(使用标准zipfile
模块),然后将您的数据腌入其中。
hth,
- 乔
# 回答2


Joewell,这是一个想法:创建一个zip文件(使用标准
joezipfile模块),然后将您的数据腌入其中。
另外,指定泡菜二进制Protool。这是一个愚蠢的例子:
14
18
skip
# 回答3

skge@pobox.com Joewell,这是一个想法:创建一个zip文件(使用标准
joezipfile模块),然后将您的数据腌入其中。
另外,指定泡菜二进制Protool。这是一个愚蠢的例子:
14
18
甚至
496
141
真的
- -
Nick Craig-Wood
# 回答4


多谢你们。这是为了序列化磁盘。我希望不
必须使用太多的中间步骤,但我不知道如何
在不使用任何一个中间字符串的情况下将泡菜数据腌入Zipfile
或文件。这很酷,这是我可能会解决的(测试) -
现在,只需要逆转开放函数即可。
def saveojb(self,dataObj):
fname = self.version +'_' + self.modname +'.dat'
f =打开(fname,'w')
dstr = pickle.dumps(dataObj)
c = dstr.encode(" bz2")
Pickle.dump(c,f,pickle.higheest_protocol)
f.close()
我很高兴看到" encode()"不是字符串操作之一
弃用列表(使用Python 2.5)。
谢谢,
标记
# 回答5


MarkDef Saveojb(self,dataObj):
mark fname = self.version +'_' + self.modname +'.dat'
标记F =打开(fname,'w')
mark dstr = pickle.dumps(dataObj)
标记C = Dstr.Encode(" BZ2")
Mark Pickle.Dump(C,F,Pickle.higheest_protocol)
mark f.close()
嗯...为什么要腌制两次?
def saveojb(self,dataObj):
fname = self.version +'_' + self.modname +'.dat'
f =打开(fname,'wb')
f.write(pickle.dumps(dataObj,pickle.higheest_protocol).encode(" bz2"))
f.close()
跳过
# 回答6


11月17日,3:08*pm,s ...@pobox.com写道:
我不确定字符串对象是否仍然是字符串
"编码"被称为...至少是否仍然是ASCII字符串。
如果没有,是否可以使用转储。我测试了你
变化和它的作用相同。我想你的"写"正在做
与我的"转储"相同,但可能更有效。谢谢。
# 回答7


马克写道:
您应该能够使用gzip.gzipfile
或bz2.bz2file和泡菜直接进入其中。
- -
格雷格
# 回答8


greg 您应该能够使用gzip.gzipfile
或bz2.bz2file和泡菜直接进入其中。
好主意 - 那会 提高内存效率。例如
真的
(请注意,基本的腌制协议可能更可压缩
比二进制版本!)
- -
Nick Craig-Wood
# 回答9


尼克·克雷格·伍德(Nick Craig-Wood)写道:
虽然二进制版本可能更紧凑
从...开始。比较
两个,看看哪一个获胜。
- -
格雷格
# 回答10


greg 虽然二进制版本可能更紧凑
从...开始。比较
两个,看看哪一个获胜。
当然,这是非常依赖数据的,但是在这种情况下是二进制
版本赢了...
但是,文本中完全有相同数量的信息
泡菜和二进制泡菜,因此从理论上讲,完美的压缩机将
压缩每个尺寸完全相同;-)
1055197L
524741L
实际的考虑可能是BZ2非常昂贵。它
也有很大的开销
例如
37
因此,如果您压迫很多小东西,Zip是更好的
协议
9
它也快得多!
- -
Nick Craig-Wood

标签: python

添加新评论