2011-01-30 13 views
15

Estoy tratando de utilizar Zlib para compresión de texto.Cómo comprimir un texto?

Por ejemplo, tengo un texto T='blah blah blah blah' necesito para comprimirlo para este Estoy usando S=zlib.compress(T) Ahora lo que quiero es conseguir la forma ASCII de S para que pueda descomprimir este T pero en un programa diferente. Gracias,

EDIT: Supongo que tengo un método para resolver aquí es la forma:

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 

lo que da:

eNoLDnF09lbwD3MNcvPxD1cIHhxcAE9UKaU= 

Ahora puede copiar este código a un programa diferente para obtener la parte posterior programa original:

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

Pl facilite la sugerencia si conoce algún otro método de compresión que proporcione mejores resultados mientras sea consistente de la misma manera.

+0

Uso zlib para descomprimir S? – arthurprs

+0

¿Qué le impide usar [zlib.decompress()] (http://docs.python.org/library/zlib.html#zlib.decompress) en ese otro programa? –

+0

¿Aceptarás mi respuesta a tu pregunta anterior? Eso podría animarme a ayudarte con esta nueva pregunta. Ahora entiendo a lo que te refieres. –

Respuesta

-2

Use pickle. Esto le permite guardar un objeto python en una secuencia (como un archivo) que luego puede eliminar en su otro programa (también puede transmitir en TCP o lo que tenga; pickle serializa los datos).

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

+0

Excepto que quiere texto * compresión *; en general, los resultados de pickle en una cadena * más larga * que incluye información estructural y de tipo. –

+0

Compresión no es serialización –

10

Programa 1:

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

Se evita así la cadena comprimida en un archivo llamado temp.zlib de manera que el programa 2 puede recuperar más tarde y descomprimirlo.

Programa 2:

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

Sí, esto está muy cerca de lo que quiero, pero lo que necesito precisamente es hacerlo con la ayuda de dos archivos solamente, sin el uso del tercer archivo. – Quixotic

+0

¿Qué tercer archivo? Aquí solo hay un archivo. Si está contando sus aplicaciones como archivos, entonces, es una tercera cosa, pero si no quiere serializar los datos en el disco, tendrá que proporcionarnos mucho más información sobre cómo su el sistema funciona –

+0

@Nick Bastin: echa un vistazo a http://stackoverflow.com/questions/4844907/text-compression-in-python/4844924#4844924, respuesta de Lennart Regebro, lo que no entiendo cómo obtiene ese valor comprimido en esa forma . – Quixotic

Cuestiones relacionadas