在内存中压缩Python对象

17

大多数关于Python压缩文件的教程都立即将该文件写入磁盘,而没有使用中间压缩的Python对象。我想知道如何在内存中pickle然后压缩一个Python对象,而不必从磁盘读取或写入数据。


据我所知,你无法压缩对象本身。但是你可以压缩对象的表示形式(例如序列化)。其中最明显的表示形式应该是一个字符串,因此你可能想要查看这个问题:https://dev59.com/ZWoy5IYBdhLWcg3wguSS#8513981 - loopbackbee
好的,那么我该如何将数据进行pickle并压缩到内存中呢? - Michael
压缩使用哪种压缩技术?有多种选择。 - Martijn Pieters
只需将对象使用pickle.dumps转换为字符串,然后压缩该字符串(参见我之前提供的链接)。 - loopbackbee
3个回答

30

我使用这个方法在一个地方节省内存:

import cPickle
import zlib

# Compress:
compressed = zlib.compress(cPickle.dumps(obj))

# Get it back:
obj = cPickle.loads(zlib.decompress(compressed))

如果 obj 引用了许多小对象,这可以大幅减少内存使用量。在 Python 中,许多小对象会因为每个对象的内存开销以及内存碎片化而增加内存使用量。


6
在Python 3中,由于cPickle已经不存在了,所以我们需要使用pickle。 - Hammad Hassan

11

电池已包含在内。

>>> zlib.compress(pickle.dumps([42]))
'x\x9c\xd3\xc8)0\xe0\xf241\xe2J\xd4\x03\x00\x10A\x02\x87'

6
bz2.compress(pickle.dumps(some_object))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接