Skip to content

Instantly share code, notes, and snippets.

@jlinoff
Last active February 8, 2024 05:54
Show Gist options
  • Save jlinoff/370895dc500783c06af2f22a464542c5 to your computer and use it in GitHub Desktop.
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.
#!/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