Python: как сжать строку текста

Для того, чтобы уменьшить объем длинной текстовой строки, например для снижения трафика при передаче текстовых данных через Интернет, ее можно сжать перед отправкой и разархивировать после получения. При этом объем передаваемых данных значительно снижается, по сравнению с передачей текстовых строк в их исходном виде.

Чтобы заархивировать текстовую строку в памяти, воспользуемся модулем zlib.

Для сжатия строки мы будем использовать функцию compress. Эта функция принимает во входном параметре строку байт и возвращает эту строку в сжатом виде.

Как видно на простейшем примере, объем строки сократился более чем в полтора раза.

Так как zlib.compress во входном аргументе принимает строку байт, мы предварительно закодировали исходный текст в набор байт UTF-8 с помощью функции encode.

В результате компрессии мы так же получили строку байт. Если протокол передачи данных требует передавать именно текстовую строку, мы можем получить ее закодировав результат в base64.

Как мы видим, размер строки увеличился, но все равно остается меньше, чем размер исходной строки текста. При увеличении размера исходного текста, разница между сжатым и не сжатым текстами будет увеличиваться.

Чтобы из сжатого текста получить исходный, нужно его декодировать и разархивировать. Для этого проведем обратные преобразования: