【问题标题】:Compress Python Object in Memory在内存中压缩 Python 对象
【发布时间】:2013-10-21 17:02:25
【问题描述】:

大多数关于在 Python 中压缩文件的教程都涉及立即将该文件写入磁盘,而无需干预压缩的 Python 对象。我想知道如何腌制然后压缩内存中的python对象,而无需从磁盘写入或读取。

【问题讨论】:

  • 你不能压缩一个对象,AFAIK。您可以压缩对象的表示(例如,序列化)。最明显的表示是字符串,因此您可能需要检查this question
  • 好的,那么我如何腌制然后压缩内存中的表示?
  • 用什么压缩技术压缩?有多种可供选择。
  • 只需pickle to a string 然后压缩字符串(见我之前的链接)

标签: python compression


【解决方案1】:

我用它来在一个地方节省内存:

import cPickle
import zlib

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

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

如果obj 引用了许多小对象,这可以减少很多使用的内存量。由于每个对象的内存开销以及内存碎片,Python 中的许多小对象加起来。

【讨论】:

  • 在python 3中,我们需要pickle,因为没有cPickle。
【解决方案2】:

包括电池。

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

【讨论】:

    【解决方案3】:
    bz2.compress(pickle.dumps(some_object))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-21
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多