Python で文字列を圧縮する
長い文字列を圧縮して送信したいとき。
text が短い場合は逆にサイズ増えたりもします。
code:zip.py
import zlib
import base64
def zip_str(text: str) -> str:
b = zlib.compress(text.encode())
return base64.b85encode(b).decode()
def unzip_str(text: str) -> str:
b = base64.b85decode(text)
return zlib.decompress(b).decode()
利用例
code:py
>> text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
>> zip_str(text)
'c$_tm%W(rS31K%0iLZQx#gMy7zyieMn6lW$K{90CO1(eLEwG#$qF6ID{?P=VyQtY?S|CbVltXfNY<fCleRlpGfp9HbCNdxo)&*w&UbYxZVvLy@o02kp(s@$7EiauNpd>YuahB&J3$1_T)H#}SyT3<FjgD=jcCZ@f?OOcxTrM!p2)V}m9sUwC#3FkFD^(#S~vIB2hQrrlg9!{>X+AujLzu7WpB#)10FFxWN!%idx*CLXZ@{cG2IZnT;7}_?3Au|e}2i{+a!|0o1Fz6>Q_LkFn#J};q!_bnX4@1usW_Uv4B5HS&oeL!G8gCW)?T&^*?=@~tUs<^j~XlrE&'
>> len(text)
446
>> len(zip_str(text))
338
>> unzip_str(zip_str(text))
'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
base85 初めて知った
使える場所限られそうだけどBase64より文字種が多いのでより短く