Wie komprimiere ich einen String in Python?
gzip.GzipFile
existiert, aber das ist für Dateiobjekte - was ist mit einfachen Zeichenfolgen?
python
compression
gzip
Bdfy
quelle
quelle
StringIO
aber nicht wirklich, wie es geht. Diese Frage hier zu stellen ist also völlig gültig, IMHO. Noch ein paar Versuche, bevor wir gefragt und uns davon erzählt haben, wären allerdings nett gewesen.gzip string in python
und ist IMO sehr vernünftig. Es sollte wieder geöffnet werden.Antworten:
Wenn Sie eine komplette produzieren wollen
gzip
-kompatible Binärkette, mit dem Header etc, könnten Siegzip.GzipFile
zusammen mitStringIO
:quelle
f = gzip.GzipFile(StringIO.StringIO(text)); result = f.read(); f.close(); return result
import zlib; my_string = "hello world"; my_bytes = zlib.compress(my_string.encode('utf-8')); my_hex = my_bytes.hex(); my_bytes2 = bytes.fromhex(my_hex); my_string2 = zlib.decompress(my_bytes); assert my_string == my_string2;
Der einfachste Weg ist die
zlib
Kodierung :Dann dekomprimieren Sie es mit:
quelle
s
ist ein Python 2.x-Objekt vom Typstr
.s.encode('rot13')
,s.encode( 'base64' )
plain_string_again = compressed_value.decode("zlib")
str
in Python 3) und Byte-Zeichenfolgen (Typbytes
) strenger .str
Objekte haben eineencode()
Methode, die einbytes
Objekt zurückgibt , undbytes
Objekte haben einedecode()
Methode, die a zurückgibtstr
. Derzlib
Codec ist insofern besonders, als er vonbytes
nach konvertiertbytes
, sodass er nicht in diese Struktur passt. Sie können stattdessencodecs.encode(b, "zlib")
undcodecs.decode(b, "slib")
für einbytes
Objektb
verwenden.Python3-Version von Sven Marnach's Antwort von 2011:
quelle
zlib
wird immer noch verwendet,gzip
tatsächlich verwendetzlib
, siehe: docs.python.org/3/library/zlib.html und docs.python.org/3/library/gzip.html#module-gzipFür diejenigen, die einen Pandas-Datenrahmen im JSON-Format komprimieren möchten:
Getestet mit Python 3.6 und Pandas 0.23
quelle
quelle