Ведь что такое кодирование? Просто преобразование данных из одного вида в другой. Компрессия это тоже просто другая форма данных.
Представление данных в виде ZIP просто и легко сокращает размер этих данных. Это бывает полезно или даже критично при передаче данных по медленным каналам.
# Python2Да, в результате это нереально прочитать, но мы же понимаем что это просто такая форма данных. Наша строка всё еще где-то там.
>>> my_str = 'Hello ZIP'
>>> my_zip_str = my_str.encode('zip')
>>> print my_zip_str
xЬєH═╔╔WИЄ♀ ☼╨♥️
Пробуем преобразовать обратно.
>>> my_zip_str.decode('zip')
'Hello ZIP'
Всё на месте!Пытливые умы заметили, что мы нифига не сэкономили 😭
>>> print len(my_str), len(my_zip_str)Увеличили размер почти в 2 раза!
9, 17
Да, это так. Но вся сила ZIP раскрывается на больших данных
>>> my_str = 'Hello ZIP ' * 100Чем больше строка и чем больше в ней повторов, тем лучше она сожмётся. В данном случае в 37 раз меньше данных.
>>> my_zip_str = my_str.encode('zip')
>>> print len(my_str), len(my_zip_str)
1000 27
Да, круто, но к чемуто это я? Дело в том что в Python3 этот код не сработает.
Во-первых, кодек переименован в "zlib_codec", во-вторых подобный код вызовет ошибку и отправит нас в модуль codecs.
my_str.encode('zlib_codec')
LookupError: 'zlib_codec' is not a text encoding; use codecs.encode() to handle arbitrary codecs
Данный функционал можно повторить и в Python3 но кода получится куда больше.И что теперь? Неужели я предлагаю заняться "некрокодингом" на Python2? Нет, не нужно тревожить пенсионера 🚑.
Всё будет ясно вследующем посте.
#libs