2011-01-30 23 views
15

Sto cercando di utilizzare Zlib per la compressione del testo.Come comprimere un testo?

Per esempio io ho un testo T='blah blah blah blah' ho bisogno di comprimerlo per questo che sto usando S=zlib.compress(T) Ora quello che voglio è quello di ottenere la forma ASCII di S in modo che possa decomprimere questo T ma in un programma diverso. Grazie,

EDIT: mi sa che ho un metodo per risolverlo qui è il modo:

import zlib, base64 
text = 'STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW STACK OVERFLOW ' 
code = base64.b64encode(zlib.compress(text,9)) 
print code 

che dà:

eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU= 

Ora posso copiare il codice per un programma diverso per ottenere la parte posteriore programma originale:

import zlib, base64 
s='eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU=' 
data = zlib.decompress(base64.b64decode(s)) 
print data 

Pl la facilità suggerisce se sei a conoscenza di qualsiasi altro metodo di compressione che dia risultati migliori mentre è coerente allo stesso modo.

+0

Usa zlib per decomprimere S? – arthurprs

+0

Cosa ti impedisce di usare [zlib.decompress()] (http://docs.python.org/library/zlib.html#zlib.decompress) in quell'altro programma? –

+0

Accetterete la mia risposta alla vostra domanda precedente? Questo potrebbe incoraggiarmi ad aiutarti con questa nuova domanda. Ora capisco cosa stai ricevendo. –

risposta

-2

Utilizzare sottaceto. Questo ti permette di salvare un oggetto python in uno stream (come un file) che puoi quindi deselezionare nel tuo altro programma (potresti anche eseguire lo streaming su TCP o su cosa hai; serializzazione dei dati da parte di pickle).

http://docs.python.org/library/pickle.html

+0

Tranne che vuole il testo * compressione *; in generale, il pickle risulta in una * più * stringa che include informazioni strutturali e di tipo. –

+0

La compressione non è serializzazione –

10

Programma 1:

T = 'blah blah blah blah' 
S = zlib.compress(T) 
with open("temp.zlib", "wb") as myfile: 
    myfile.write(S) 

Questo salva la stringa compressa in un file chiamato temp.zlib in modo che il programma 2 può poi recuperare e decomprimerlo.

Programma 2:

with open("temp.zlib", "rb") as myfile: 
    S = myfile.read() 
T = zlib.decompress(S) 
+0

Sì, questo è molto vicino a quello che voglio, ma ciò di cui ho esattamente bisogno è di farlo solo con l'aiuto di due file, senza l'uso del terzo file. – Quixotic

+0

Quale terzo file? Qui c'è un solo file. Se stai contando le tue applicazioni come file, allora certo, questa è una terza cosa, ma se non vuoi mai serializzare i dati su disco, dovrai fornirci molto più input su come sistema funziona. –

+0

@Nick Bastin: guarda http://stackoverflow.com/questions/4844907/text-compression-in-python/4844924#4844924, risposta di Lennart Regebro, cosa non sto ottenendo come ottiene quel valore compresso in quella forma . – Quixotic

Problemi correlati