Source code for dataIO.compress
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
data compress utility module.
abbreviation.
- f = file
- s = str
- b = bytes
- p = path
- r = read
- w = write
"""
import gzip
import zlib
import base64
#--- single file ---
def write_gzip(b, path):
with gzip.open(path, "wb") as f:
f.write(b)
def read_gzip(path):
with gzip.open(path, "rb") as f:
return f.read()
#--- compress/decompress ---
[docs]def compress_str(s):
"""use zip and base64 encoding to compress arbitrary utf-8 string to a
shorter utf-8 string.
1. str -> utf-8 bytes
2. utf-8 bytes --- zip compress ---> bytes
3. bytes -> urlsafe_b64encode bytes
4. urlsafe_b64encode bytes -> str
"""
return base64.b64encode(zlib.compress(s.encode("utf-8"))).decode("utf-8")
[docs]def decompress_str(s):
"""opposite of :func:`compress_str`.
1. str -> utf-8 bytes
2. utf-8 bytes -> b64 decode bytes
3. urlsafe_b64decode bytes --- zip decompress ---> bytes
4. bytes -> str
"""
return zlib.decompress(base64.b64decode(s)).decode("utf-8")