Last active
February 8, 2024 05:54
-
-
Save jlinoff/370895dc500783c06af2f22a464542c5 to your computer and use it in GitHub Desktop.
Python example to show to use gzip to compress/uncompress in memory strings in python-2.7 and python-3.x.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
''' | |
Show how gzip compress/uncompress works for in memory string objects | |
for python-2.7 and python-3.x. | |
License: MIT Open Source | |
Copyright (c) 2017 by Joe Linoff | |
''' | |
import base64 | |
import gzip | |
import inspect | |
import sys | |
try: | |
from StringIO import StringIO | |
except ModuleNotFoundError: | |
# Python 3. | |
from io import StringIO | |
def _debug(msg, lev=1): | |
print('DEBUG:{} {}'.format(inspect.stack()[lev][2], msg)) | |
def compress(text): | |
''' | |
Compress data and base64 encode data. | |
''' | |
if sys.version_info[0] == 2: | |
sfp = StringIO() | |
gfp = gzip.GzipFile(filename='internal.txt', fileobj=sfp, mode='wb', compresslevel=9) | |
gfp.write(text) | |
gfp.close() | |
data = sfp.getvalue() | |
sfp.close() | |
else: | |
btext = bytes(text, 'utf-8', 'ignore') | |
data = gzip.compress(btext, compresslevel=9) | |
compressed = base64.b64encode(data) | |
return compressed | |
def uncompress(data): | |
''' | |
Base64 decode and uncompress data. | |
''' | |
data = base64.b64decode(data) | |
if sys.version_info[0] == 2: | |
sfp = StringIO() | |
sfp.write(data) | |
sfp.seek(0) | |
gfp = gzip.GzipFile(fileobj=sfp, mode='rb') | |
uncompressed = gfp.read() | |
sfp.close() | |
gfp.close() | |
else: | |
uncompressed = gzip.decompress(data) | |
# Convert to string for printing. | |
uncompressed = uncompressed.decode('utf-8', 'ignore') | |
return uncompressed | |
def main(): | |
''' | |
main | |
''' | |
text = ''' | |
Sed ut perspiciatis unde omnis iste natus error sit voluptatem | |
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae | |
ab illo inventore veritatis et quasi architecto beatae vitae dicta | |
sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit | |
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos | |
qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui | |
dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed | |
quia non numquam eius modi tempora incidunt ut labore et dolore magnam | |
aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum | |
exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex | |
ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in | |
ea voluptate velit esse quam nihil molestiae consequatur, vel illum | |
qui dolorem eum fugiat quo voluptas nulla pariatur? | |
''' | |
_debug('len(text) {}'.format(len(text))) | |
print(text) | |
compressed = compress(text) | |
uncompressed = uncompress(compressed) | |
print(uncompressed) | |
assert text == uncompressed | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment