В Python 3.14 появился новый пакет
compression — и это тот редкий случай, когда «объединили старое и добавили новое» получилось реально полезно.Теперь работа со сжатием — это единый интерфейс, а не квест из пяти разных модулей и документаций.
В пакете
compression собрали сразу 5 алгоритмов:➡️
bz2➡️
gzip➡️
lzma➡️
zlib➡️ zstd — вот он тут главный новичок: ZstdCompressor и ZstdDecompressor
Причём первые четыре и раньше были в стандартной библиотеке, но теперь их рекомендуют импортировать через
compression, чтобы всё было в одном стиле:
from compression import gzip, zstd
👍 Почему это круто
1️⃣ Единый API
У всех модулей есть:
compress(data)
decompress(data)
Можно буквально перебрать алгоритмы в цикле и сравнить результат. Да, Python теперь позволяет выбрать компрессию так же просто, как сортировку.
2️⃣ `zstd` — новый любимчик
На тестовых данных
zstd сжимает в 2+ раза лучше, чем старые алгоритмы.Меньше байтов — меньше боли при хранении, передаче и бэкапах:
from compression import zstd
compressor = zstd.ZstdCompressor()
result = b""
bytes_processed = 0
for chunk in incoming_data_stream():
# `chunk` is a new batch of data.
bytes_processed += len(chunk)
# We compress this batch.
result += compressor.compress(chunk)
result += compressor.flush()
ratio = len(result) / bytes_processed
print(f"{100 * ratio:>.2f}%") # 0.56%
3️⃣ Обычная работа с файлами
Например:
with zstd.open("data.zst", "wt") as f:
f.write("Hello, world!" * 1000)
4️⃣ Потоковое (инкрементальное) сжатие
Для стримов, логов и больших данных есть компрессоры и декомпрессоры:
➡️ сжимаешь кусками
➡️ читаешь чанками
➡️ память не умирает
Например:
compressor = zstd.ZstdCompressor()
compressor.compress(chunk)
compressor.flush()
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст