¿Cómo comprime gzip una cadena en Python?¿Cómo comprime gzip una cadena en Python?
gzip.GzipFile
existe, pero eso es para los objetos de archivo: ¿qué pasa con las cadenas simples?
¿Cómo comprime gzip una cadena en Python?¿Cómo comprime gzip una cadena en Python?
gzip.GzipFile
existe, pero eso es para los objetos de archivo: ¿qué pasa con las cadenas simples?
Elija un módulo adecuado de http://docs.python.org/library/archiving.html - ya sea gzip o zlib, según sus necesidades exactas.
Veo que zlib tiene varios niveles de compresión. ¿Cuál es el nivel que usa gzip? – bellpeace
bellpeace, ¿siguió el enlace a la documentación de gzip? "El argumento de nivel de compresión es un número entero de 1 a 9 que controla el nivel de compresión; 1 es el más rápido y produce la menor compresión, y el 9 es el más lento y produce la mayor compresión. El valor predeterminado es [ELIMINADO]". Te dejaré verificar el valor real tú mismo. :) –
El valor predeterminado es 9, el más lento. –
La forma más sencilla es la zlib
encoding:
compressed_value = s.encode("zlib")
A continuación, descomprimirlo con:
plain_string_again = compressed_value.decode("zlib")
es s la cadena? – dcousens
@Daniel: Sí, 's' es un objeto de Python 2.x de tipo' str'. –
Ver [Codificaciones estándar] (http://docs.python.org/2/library/codecs.html#standard-encodings) para donde lo obtuvo (desplácese hacia abajo a __ "códecs" __). También disponible: 's.encode ('rot13')', 's.encode ('base64')' – bobobobo
Si se quiere producir un gzip
cadena binaria compatible completo, con la cabecera, etc, puede usar gzip.GzipFile
junto con StringIO
:
import StringIO
import gzip
out = StringIO.StringIO()
with gzip.GzipFile(fileobj=out, mode="w") as f:
f.write("This is mike number one, isn't this a lot of fun?")
out.getvalue()
# returns '\x1f\x8b\x08\x00\xbd\xbe\xe8N\x02\xff\x0b\xc9\xc8,V\x00\xa2\xdc\xcc\xecT\x85\xbc\xd2\xdc\xa4\xd4"\x85\xfc\xbcT\x1d\xa0X\x9ez\x89B\tH:Q!\'\xbfD!?M!\xad4\xcf\x1e\x00w\xd4\xea\xf41\x00\x00\x00'
Ahorro de vida. Simplemente impresionante. Sé que esto es viejo, ¡pero gracias! –
Esta debería ser la respuesta aceptada. – ForeverWintr
Lo contrario de esto es: 'def gunzip_text (texto): infile = StringIO.StringIO() infile.write (texto) con gzip.GzipFile (fileobj = infile, modo = "r") como f: f .rewind() f.read() return out.getvalue() – fastmultiplication
s = "a long string of characters"
g = gzip.open('gzipfilename.gz', 'w', 5) # ('filename', 'read/write mode', compression level)
g.write(s)
g.close()
Supongo que la pregunta era sobre la compresión de una cadena en la memoria sin tener que escribirla en el disco en el proceso. De lo contrario, tu respuesta es totalmente correcta. – Alfe
primer resultado para 'python gzip' http://docs.python.org/library/gzip.html (¿podría probar un poco?) – KevinDTimm
@KevinDTimm, ese docu solo menciona 'StringIO' pero no realmente no explica cómo hacerlo. Entonces, hacer esa pregunta aquí es completamente válido, en mi humilde opinión. Sin embargo, algunas pruebas más antes de preguntar y contarnos sobre ellas hubieran sido agradables. – Alfe
@Alfe - la pregunta se cerró hace 4 años por la misma razón que mi comentario - el OP no hizo ningún esfuerzo para buscar primero. – KevinDTimm