2013-10-21 15 views
7

La maggior parte dei tutorial sulla compressione di un file in Python comporta la scrittura immediata del file su disco senza alcun oggetto python compresso. Voglio sapere come mettere sottosopra e poi comprimere un oggetto python in memoria senza mai scrivere o leggere dal disco.Comprimi oggetti Python in memoria

+0

Non è possibile comprimere un oggetto, AFAIK. È * possibile * comprimere * la rappresentazione * di un oggetto (serializzato, ad esempio). La rappresentazione più ovvia sarebbe una stringa, quindi potresti voler controllare [questa domanda] (http://stackoverflow.com/questions/8506897/how-do-i-gzip-compress-a-string-in-python/ 8513981 # 8513981) – goncalopp

+0

Ok, quindi come faccio a decapitare e quindi comprimere la rappresentazione in memoria? – Michael

+0

Compressione con quale tecnica di compressione? Ci sono più tra cui scegliere. –

risposta

14

Io lo uso per risparmiare memoria in un unico luogo:

import cPickle 
import zlib 

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

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

Se obj ha riferimenti a un certo numero di piccoli oggetti, questo può ridurre la quantità di memoria utilizzata da un sacco. Un sacco di piccoli oggetti in Python si sommano a causa del sovraccarico della memoria per oggetto e della frammentazione della memoria.

3
bz2.compress(pickle.dumps(some_object)) 
4

Batterie incluse.

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