Содержание страницы
compression.zstd – Сжатие, совместимое с форматом Zstandard¶compression.zstd – Compression compatible with the Zstandard format
Добавлено в версии 3.14.
Исходный код: Lib/compression/zstd/__init__.py
Этот модуль предоставляет классы и функции для сжатия и декомпрессии данных с использованием алгоритма сжатия Zstandard (или zstd). Руководство по zstd описывает Zstandard как «быстрый алгоритм сжатия без потерь, предназначенный для сценариев сжатия в реальном времени на уровне zlib и с лучшим коэффициентом сжатия». Также включён файловый интерфейс, поддерживающий чтение и запись содержимого файлов .zst, созданных утилитой zstd, а также сырых сжатых потоков zstd.
Модуль compression.zstd содержит:
Функция
open()и классZstdFileдля чтения и записи сжатых файлов.Классы
ZstdCompressorиZstdDecompressorдля инкрементального сжатия и распаковки.Функции
compress()иdecompress()для одноразового сжатия и распаковки.Функции
train_dict()иfinalize_dict(), а также классZstdDictдля обучения и управления словарями Zstandard.Классы
CompressionParameter,DecompressionParameterиStrategyдля задания расширенных параметров (де)компрессии.
Это опциональный модуль. Если его нет в вашей копии CPython, обратитесь к документации от вашего дистрибьютора (то есть того, кто предоставил вам Python). Если вы дистрибьютор, обратитесь к требованиям к опциональным модулям.
Исключения¶Exceptions
- exception compression.zstd.ZstdError¶
Это исключение возбуждается, когда во время сжатия или декомпрессии, либо при инициализации состояния (де)компрессора происходит ошибка.
Чтение и запись сжатых файлов¶Reading and writing compressed files
- compression.zstd.open(file, /, mode='rb', *, level=None, options=None, zstd_dict=None, encoding=None, errors=None, newline=None)¶
Открывает файл, сжатый Zstandard, в двоичном или текстовом режиме и возвращает файловый объект.
Аргумент file может быть либо именем файла (заданным как объект
str,bytesили путеподобный), в этом случае открывается указанный файл, либо существующим файловым объектом для чтения или записи.Аргумент mode может быть
'rb'для чтения (по умолчанию),'wb'для перезаписи,'ab'для добавления или'xb'для исключительного создания. Эквивалентно их можно задать как'r','w','a'и'x'соответственно. Также можно открыть в текстовом режиме с помощью'rt','wt','at'и'xt'соответственно.При чтении аргумент options может быть словарём с расширенными параметрами декомпрессии; подробнее о поддерживаемых параметрах см.
DecompressionParameter. Аргумент zstd_dict – это экземплярZstdDict, используемый при декомпрессии. При чтении, если аргумент level не равен None, будет возбужденоTypeError.При записи аргумент options может быть словарём с расширенными параметрами сжатия; подробнее о поддерживаемых параметрах см.
CompressionParameter. Аргумент level – уровень сжатия, используемый при записи сжатых данных. Только один из level или options может быть не равен None. Аргумент zstd_dict – экземплярZstdDict, используемый при сжатии.В двоичном режиме эта функция эквивалентна конструктору
ZstdFile:ZstdFile(file, mode, ...). В этом случае параметры encoding, errors и newline не должны указываться.В текстовом режиме создаётся объект
ZstdFile, обёрнутый в экземплярio.TextIOWrapperс указанными кодировкой, поведением обработки ошибок и символами конца строки.
- class compression.zstd.ZstdFile(file, /, mode='rb', *, level=None, options=None, zstd_dict=None)¶
Открывает файл, сжатый Zstandard, в двоичном режиме.
ZstdFileможет обёртывать уже открытый файловый объект или работать напрямую с именованным файлом. Аргумент file задаёт либо обёртываемый файловый объект, либо имя открываемого файла (как объектstr,bytesили путеподобный). При обёртывании существующего файлового объекта обёрнутый файл не будет закрыт при закрытииZstdFile.Аргумент mode может быть
'rb'для чтения (по умолчанию),'wb'для перезаписи,'xb'для исключительного создания или'ab'для добавления. Эквивалентно их можно задать как'r','w','x'и'a'соответственно.Если file – файловый объект (а не собственно имя файла), то режим
'w'не усекает файл, а эквивалентен'a'.При чтении аргумент options может быть словарём с расширенными параметрами декомпрессии; подробнее о поддерживаемых параметрах см.
DecompressionParameter. Аргумент zstd_dict – экземплярZstdDict, используемый при декомпрессии. При чтении, если аргумент level не None, будет возбужденоTypeError.При записи аргумент options может быть словарём с расширенными параметрами сжатия; подробнее о поддерживаемых параметрах см.
CompressionParameter. Аргумент level – уровень сжатия, используемый при записи сжатых данных. Можно передать только один из level или options. Аргумент zstd_dict – экземплярZstdDict, используемый при сжатии.ZstdFileподдерживает все члены, указанные вio.BufferedIOBase, за исключениемdetach()иtruncate(). Поддерживаются итерация и операторwith.Также предоставляются следующие методы и атрибуты:
- peek(size=-1)¶
Возвращает буферизованные данные, не сдвигая позицию в файле. Будет возвращён как минимум один байт данных, если не достигнут EOF. Точное количество возвращаемых байт не определено (аргумент size игнорируется).
Примечание
Хотя вызов
peek()не изменяет позицию файла вZstdFile, он может изменить позицию нижележащего файлового объекта (например, еслиZstdFileбыл создан путём передачи файлового объекта в file).
- mode¶
'rb'для чтения и'wb'для записи.
- name¶
Имя файла Zstandard. Эквивалентно атрибуту
nameнижележащего файлового объекта.
Сжатие и распаковка данных в памяти¶Compressing and decompressing data in memory
- compression.zstd.compress(data, level=None, options=None, zstd_dict=None)¶
Сжимает data (объект, подобный байтам) и возвращает сжатые данные в виде объекта
bytes.Аргумент level – целое число, управляющее степенью сжатия. level – альтернатива установке
CompressionParameter.compression_levelв options. Используйтеbounds()наcompression_level, чтобы получить значения, которые можно передать для level. Если требуются дополнительные параметры сжатия, аргумент level должен быть опущен, а в словаре options следует задать параметрCompressionParameter.compression_level.Аргумент options – это словарь Python, содержащий дополнительные параметры сжатия. Допустимые ключи и значения для параметров сжатия описаны в документации
CompressionParameter.Аргумент zstd_dict – это экземпляр
ZstdDict, содержащий обученные данные для повышения эффективности сжатия. Для генерации словаря Zstandard можно использовать функциюtrain_dict().
- compression.zstd.decompress(data, zstd_dict=None, options=None)¶
Распаковывает data (объект, подобный байтам) и возвращает распакованные данные в виде объекта
bytes.Аргумент options – это словарь Python, содержащий расширенные параметры декомпрессии. Допустимые ключи и значения для параметров сжатия документированы в
DecompressionParameter.Аргумент zstd_dict – это экземпляр
ZstdDict, содержащий обученные данные, использованные при сжатии. Он должен быть тем же самым словарём Zstandard, который использовался при сжатии.Если data представляет собой объединение нескольких отдельных сжатых фреймов, распакуйте все эти фреймы и верните объединение результатов.
- class compression.zstd.ZstdCompressor(level=None, options=None, zstd_dict=None)¶
Создаёт объект компрессора, который можно использовать для инкрементального сжатия данных.
Для более удобного сжатия одного фрагмента данных обратитесь к функции уровня модуля
compress().Аргумент level – целое число, управляющее степенью сжатия. level – альтернатива установке
CompressionParameter.compression_levelв options. Используйтеbounds()наcompression_level, чтобы получить значения, которые можно передать для level. Если требуются дополнительные параметры сжатия, аргумент level должен быть опущен, а в словаре options следует задать параметрCompressionParameter.compression_level.Аргумент options – это словарь Python, содержащий дополнительные параметры сжатия. Допустимые ключи и значения для параметров сжатия описаны в документации
CompressionParameter.Аргумент zstd_dict – необязательный экземпляр
ZstdDict, содержащий обученные данные для повышения эффективности сжатия. Для генерации словаря Zstandard можно использовать функциюtrain_dict().- compress(data, mode=ZstdCompressor.CONTINUE)¶
Сжимает data (объект, подобный байтам) и возвращает объект
bytesсо сжатыми данными, если возможно, или пустой объектbytesв противном случае. Часть data может быть помещена во внутренний буфер для использования в последующих вызовахcompress()иflush(). Возвращаемые данные следует объединять с выводом всех предыдущих вызововcompress().Аргумент mode – это атрибут
ZstdCompressor:CONTINUE,FLUSH_BLOCKилиFLUSH_FRAME.Когда все данные переданы компрессору, вызовите метод
flush()для завершения процесса сжатия. Еслиcompress()вызывается с mode, установленным вFLUSH_FRAME, не следует вызыватьflush(), так как это запишет новый пустой фрейм.
- flush(mode=ZstdCompressor.FLUSH_FRAME)¶
Завершает процесс сжатия, возвращая объект
bytes, содержащий данные, хранящиеся во внутренних буферах компрессора.Аргумент mode – это атрибут
ZstdCompressor:FLUSH_BLOCKилиFLUSH_FRAME.
- set_pledged_input_size(size)¶
Задаёт объём несжатых данных size, которые будут предоставлены для следующего фрейма. size будет записан в заголовок следующего фрейма, если только
CompressionParameter.content_size_flagне равенFalseили0. Размер0означает, что фрейм пуст. Если size равенNone, заголовок фрейма будет без указания размера. Фреймы, включающие размер несжатых данных, требуют меньше памяти для распаковки, особенно при высоких степенях сжатия.Если
last_modeне равенFLUSH_FRAME, возникает исключениеValueError, так как компрессор находится не в начале фрейма. Если указанный размер не соответствует фактическому размеру данных, переданных вcompress(), будущие вызовыcompress()илиflush()могут вызватьZstdError, и последний фрагмент данных может быть потерян.После вызова
flush()илиcompress()с режимомFLUSH_FRAMEследующий фрейм не будет включать размер фрейма в заголовок, если только повторно не вызватьset_pledged_input_size().
- CONTINUE¶
Собирает больше данных для сжатия, что может генерировать выходные данные немедленно или нет. Этот режим оптимизирует степень сжатия, максимизируя объём данных на блок и фрейм.
- FLUSH_BLOCK¶
Завершает и записывает блок в поток данных. Возвращённые на данный момент данные могут быть немедленно распакованы. Предыдущие данные всё ещё могут использоваться в будущих блоках, создаваемых вызовами
compress(), что улучшает сжатие.
- FLUSH_FRAME¶
Завершает и записывает кадр. Последующие данные, переданные в
compress(), будут записаны в новый кадр и не могут ссылаться на предыдущие данные.
- last_mode¶
Последний режим, переданный в
compress()илиflush(). Значение может бытьCONTINUE,FLUSH_BLOCKилиFLUSH_FRAME. Начальное значение –FLUSH_FRAME, что означает, что компрессор находится в начале нового кадра.
- class compression.zstd.ZstdDecompressor(zstd_dict=None, options=None)¶
Создаёт объект декомпрессора, который можно использовать для инкрементальной декомпрессии данных.
Для более удобного способа декомпрессии целого сжатого потока за один раз обратитесь к функции уровня модуля
decompress().Аргумент options – это словарь Python, содержащий расширенные параметры декомпрессии. Допустимые ключи и значения для параметров сжатия документированы в
DecompressionParameter.Аргумент zstd_dict – это экземпляр
ZstdDict, содержащий обученные данные, использованные при сжатии. Он должен быть тем же самым словарём Zstandard, который использовался при сжатии.Примечание
Этот класс не обрабатывает прозрачно входные данные, содержащие несколько сжатых кадров, в отличие от функции
decompress()и классаZstdFile. Чтобы декомпрессировать многофреймовый ввод, следует использоватьdecompress(),ZstdFileпри работе с файловым объектом или несколько экземпляровZstdDecompressor.- decompress(data, max_length=-1)¶
Декомпрессирует data (байтоподобный объект), возвращая несжатые данные в виде байтов. Часть data может быть буферизована внутренне для использования в последующих вызовах
decompress(). Возвращаемые данные следует объединить с выводом всех предыдущих вызововdecompress().Если max_length неотрицателен, метод возвращает не более max_length байт декомпрессированных данных. Если этот лимит достигнут и можно сгенерировать больше данных, атрибут
needs_inputбудет установлен вFalse. В этом случае следующий вызовdecompress()может передать data какb''для получения дополнительного вывода.Если все входные данные были декомпрессированы и возвращены (либо потому что это было меньше max_length байтов, либо потому что max_length было отрицательным), атрибут
needs_inputбудет установлен вTrue.Попытка декомпрессии данных после конца кадра вызовет исключение
ZstdError. Любые данные, обнаруженные после конца кадра, игнорируются и сохраняются в атрибутеunused_data.
- eof¶
True, если достигнут маркер конца потока.
- unused_data¶
Данные, обнаруженные после конца сжатого потока.
До достижения конца потока это будет
b''.
- needs_input¶
False, если методdecompress()может предоставить больше декомпрессированных данных до запроса нового сжатого ввода.
Словари Zstandard¶Zstandard dictionaries
- compression.zstd.train_dict(samples, dict_size)¶
Обучает словарь Zstandard, возвращая экземпляр
ZstdDict. Словари Zstandard обеспечивают более эффективное сжатие небольших объёмов данных, которые традиционно трудно сжимать из-за меньшей повторяемости. Если сжимаются несколько похожих групп данных (например, похожие файлы), словари Zstandard могут значительно улучшить степень сжатия и скорость.Аргумент samples (итерируемый объект из
bytes) – это набор образцов, используемый для обучения словаря Zstandard.Аргумент dict_size, целое число, задаёт максимальный размер (в байтах) словаря Zstandard. В документации Zstandard рекомендуется абсолютный максимум не более 100 КБ, но часто можно использовать меньший размер в зависимости от данных. Более крупные словари обычно замедляют сжатие, но улучшают степень сжатия. Меньшие словари ускоряют сжатие, но снижают степень сжатия.
- compression.zstd.finalize_dict(zstd_dict, /, samples, dict_size, level)¶
Расширенная функция для преобразования словаря Zstandard с «сырым содержимым» в обычный словарь Zstandard. Словари с «сырым содержимым» – это последовательность байтов, которая не обязана следовать структуре обычного словаря Zstandard.
Аргумент zstd_dict – это экземпляр
ZstdDictсdict_content, содержащим сырое содержимое словаря.Аргумент samples (итерируемый объект из
bytes) содержит образцы данных для генерации словаря Zstandard.Аргумент dict_size, целое число, задаёт максимальный размер (в байтах) словаря Zstandard. См.
train_dict()для рекомендаций по максимальному размеру словаря.Аргумент level (целое число) – это уровень сжатия, который ожидается для передачи компрессорам, использующим этот словарь. Информация словаря меняется для каждого уровня сжатия, поэтому настройка на правильный уровень сжатия может сделать сжатие более эффективным.
- class compression.zstd.ZstdDict(dict_content, /, *, is_raw=False)¶
Обёртка вокруг словарей Zstandard. Словари можно использовать для улучшения сжатия множества небольших фрагментов данных. Используйте
train_dict(), если нужно обучить новый словарь на основе образцов данных.Аргумент dict_content (байтоподобный объект) – это информация уже обученного словаря.
Аргумент is_raw, логическое значение, – это расширенный параметр, управляющий значением dict_content.
Trueозначает, что dict_content является словарём в формате «сырое содержимое» без каких-либо ограничений по формату.Falseозначает, что dict_content – это обычный словарь Zstandard, созданный с помощью функций Zstandard, например,train_dict()или внешней утилиты командной строки zstd.При передаче
ZstdDictв функцию атрибутыas_digested_dictиas_undigested_dictмогут управлять тем, как загружается словарь, если передать их в качестве аргументаzstd_dict, например,compress(data, zstd_dict=zd.as_digested_dict). Подготовка словаря – это затратная операция, выполняемая при загрузке словаря Zstandard. Если при многократных вызовах сжатия или разжатия передавать подготовленный словарь, это снизит накладные расходы на загрузку словаря.Различие для сжатия¶ Подготовленный словарь
Неподготовленный словарь
Расширенные параметры компрессора, которые могут быть переопределены параметрами словаря
window_log,hash_log,chain_log,search_log,min_match,target_length,strategy,enable_long_distance_matching,ldm_hash_log,ldm_min_match,ldm_bucket_size_log,ldm_hash_rate_logи некоторые непубличные параметры.None
ZstdDictвнутренне кэширует словарьДа. Это быстрее при повторной загрузке подготовленного словаря с тем же уровнем сжатия.
Нет. Если требуется загрузить неподготовленный словарь несколько раз, рассмотрите возможность повторного использования объекта компрессора.
Если передаётся
ZstdDictбез каких-либо атрибутов, по умолчанию при сжатии передаётся неподготовленный словарь, а при разжатии при необходимости создаётся и по умолчанию передаётся подготовленный словарь.- dict_content¶
Содержимое словаря Zstandard, объект
bytes. Оно совпадает с аргументом dict_content в методе__init__. Его можно использовать с другими программами, например, с программой командной строкиzstd.
- dict_id¶
Идентификатор словаря Zstandard, неотрицательное целое значение.
Ненулевое значение означает, что словарь является обычным, созданным функциями Zstandard и следующим формату Zstandard.
0означает словарь в формате «сырое содержимое», свободный от каких-либо ограничений формата, используемый продвинутыми пользователями.Примечание
Значение
0дляZstdDict.dict_idотличается от атрибутаdictionary_idфункцииget_frame_info().
- as_digested_dict¶
Загрузить как подготовленный словарь.
- as_undigested_dict¶
Загрузить как неподготовленный словарь.
Управление расширенными параметрами¶Advanced parameter control
- class compression.zstd.CompressionParameter¶
IntEnum, содержащий ключи расширенных параметров сжатия, которые можно использовать при сжатии данных.Метод
bounds()можно вызывать для любого атрибута, чтобы получить допустимые значения для этого параметра.Параметры необязательны; для любого пропущенного параметра значение будет выбрано автоматически.
Пример получения нижней и верхней границы
compression_level:lower, upper = CompressionParameter.compression_level.bounds()
Пример установки
window_logна максимальный размер:_lower, upper = CompressionParameter.window_log.bounds() options = {CompressionParameter.window_log: upper} compress(b'venezuelan beaver cheese', options=options)
- bounds()¶
Возвращает кортеж границ типа int,
(lower, upper), для параметра сжатия. Этот метод следует вызывать для атрибута, границы которого необходимо получить. Например, чтобы узнать допустимые значения дляcompression_level, можно проверить результатCompressionParameter.compression_level.bounds().Верхняя и нижняя границы включены.
- compression_level¶
Высокоуровневое средство настройки других параметров сжатия, влияющих на скорость и степень сжатия данных.
Обычные уровни сжатия больше
0. Значения больше20считаются «ультра»-сжатием и требуют больше памяти, чем другие уровни. Отрицательные значения можно использовать для ускорения сжатия ценой ухудшения степени сжатия.Установка уровня в ноль использует
COMPRESSION_LEVEL_DEFAULT.
- window_log¶
Максимально допустимое расстояние обратной ссылки, которое может использовать компрессор при сжатии данных, выражается как степень двойки:
1 << window_logбайт. Этот параметр сильно влияет на использование памяти при сжатии. Большие значения требуют больше памяти, но обеспечивают лучшую степень сжатия.Значение 0 приводит к автоматическому выбору значения.
- hash_log¶
Размер начальной таблицы поиска (probe table) в виде степени двойки. Результирующее использование памяти составляет
1 << (hash_log+2)байт. Более крупные таблицы улучшают степень сжатия для стратегий <=dfastи увеличивают скорость сжатия для стратегий >dfast.Значение 0 приводит к автоматическому выбору значения.
- chain_log¶
Размер таблицы множественного поиска (multi-probe search table) в виде степени двойки. Результирующее использование памяти составляет
1 << (chain_log+2)байт. Более крупные таблицы приводят к лучшему, но более медленному сжатию. Этот параметр не влияет на стратегиюfast. Он всё ещё полезен при использовании стратегииdfast, в этом случае он определяет вторичную таблицу поиска.Значение 0 приводит к автоматическому выбору значения.
- search_log¶
Количество попыток поиска в виде степени двойки. Большее количество попыток даёт лучшее, но более медленное сжатие. Этот параметр бесполезен для стратегий
fastиdfast.Значение 0 приводит к автоматическому выбору значения.
- min_match¶
Минимальный размер искомых совпадений. Большие значения увеличивают скорость сжатия и распаковки, но уменьшают степень сжатия. Обратите внимание, что Zstandard всё ещё может находить совпадения меньшего размера – алгоритм просто настраивается на поиск совпадений этого размера и больше. Для всех стратегий <
btoptэффективный минимум равен4; для всех стратегий >fastэффективный максимум равен6.Значение 0 приводит к автоматическому выбору значения.
- target_length¶
Влияние этого поля зависит от выбранного
Strategy.Для стратегий
btopt,btultraиbtultra2значение – это длина совпадения, считающегося «достаточно хорошим» для прекращения поиска. Большие значения улучшают степень сжатия, но замедляют сжатие.Для стратегии
fastэто расстояние между выборками совпадений. Большие значения ускоряют сжатие, но ухудшают степень сжатия.Значение 0 приводит к автоматическому выбору значения.
- strategy¶
Чем выше значение выбранной стратегии, тем более сложную технику сжатия использует zstd, что приводит к более высокой степени сжатия, но замедляет сжатие.
См. также
- enable_long_distance_matching¶
Сопоставление на больших расстояниях (long distance matching) может использоваться для улучшения сжатия больших входных данных за счёт нахождения больших совпадений на больших расстояниях. Это увеличивает использование памяти и размер окна.
Trueили1включают сопоставление на больших расстояниях, аFalseили0отключают его.Включение этого параметра увеличивает значение по умолчанию
window_logдо 128 МиБ, если только явно не задано другое значение. Этот параметр включён по умолчанию, еслиwindow_log>= 128 МиБ и стратегия сжатия >=btopt(уровень сжатия 16+).
- ldm_hash_log¶
Размер таблицы для поиска совпадений на больших расстояниях, задаваемый как степень двойки. Большие значения увеличивают использование памяти и степень сжатия, но снижают скорость сжатия.
Значение 0 приводит к автоматическому выбору значения.
- ldm_min_match¶
Минимальный размер совпадения для средства поиска на больших расстояниях. Слишком большие или слишком маленькие значения часто могут снижать степень сжатия.
Значение 0 приводит к автоматическому выбору значения.
- ldm_bucket_size_log¶
Логарифмический размер каждой корзины в хеш-таблице средства поиска на больших расстояниях для разрешения коллизий. Большие значения улучшают разрешение коллизий, но снижают скорость сжатия.
Значение 0 приводит к автоматическому выбору значения.
- ldm_hash_rate_log¶
Частота вставки/поиска записей в хеш-таблице средства поиска на больших расстояниях. Большие значения улучшают скорость сжатия. Сильное отклонение от значения по умолчанию, скорее всего, приведет к снижению степени сжатия.
Значение 0 приводит к автоматическому выбору значения.
- content_size_flag¶
Записывать размер сжимаемых данных в заголовок фрейма Zstandard, если он известен до начала сжатия.
Этот флаг действует только в следующих сценариях:
Вызов
compress()для одноразового сжатияПередача всех сжимаемых данных во фрейме одним вызовом
ZstdCompressor.compress()в режимеZstdCompressor.FLUSH_FRAME.Вызов
ZstdCompressor.set_pledged_input_size()с точным объемом данных, который будет передан компрессору до любых вызововZstdCompressor.compress()для текущего фрейма.ZstdCompressor.set_pledged_input_size()должен вызываться для каждого нового фрейма.
Все остальные вызовы сжатия могут не записывать информацию о размере в заголовок фрейма.
Trueили1включают флаг размера содержимого, аFalseили0отключают его.
- checksum_flag¶
Четырехбайтовая контрольная сумма по алгоритму XXHash64 от несжатого содержимого записывается в конце каждого фрейма. Код декомпрессии Zstandard проверяет контрольную сумму. При несовпадении возбуждается исключение
ZstdError.Trueили1включают генерацию контрольной суммы, аFalseили0отключают её.
- dict_id_flag¶
При сжатии с использованием
ZstdDictидентификатор словаря записывается в заголовок фрейма.Trueили1включают сохранение идентификатора словаря, аFalseили0отключают его.
- nb_workers¶
Выбор количества потоков, которые будут порождены для параллельного сжатия. Когда
nb_workers> 0, включает многопоточное сжатие; значение1означает «однопоточный многопоточный режим». Больше рабочих потоков повышает скорость, но также увеличивает использование памяти и незначительно снижает степень сжатия.Нулевое значение отключает многопоточность.
- job_size¶
Размер задания на сжатие в байтах. Это значение применяется только при
nb_workers>= 1. Каждое задание на сжатие выполняется параллельно, поэтому это значение может косвенно влиять на количество активных потоков.Значение 0 приводит к автоматическому выбору значения.
- overlap_log¶
Определяет, сколько данных загружается повторно из предыдущих задач (потоков) для новых задач, чтобы они использовались окном просмотра назад при сжатии. Это значение применяется только при
nb_workers>= 1. Допустимые значения – от 0 до 9.0 – динамически устанавливать величину перекрытия
1 – без перекрытия
9 – использовать полный размер окна из предыдущего задания
Каждое приращение уменьшает или увеличивает размер перекрытия вдвое. «8» означает перекрытие
window_size/2, «7» – перекрытиеwindow_size/4и т.д.
- class compression.zstd.DecompressionParameter¶
IntEnum, содержащий ключи расширенных параметров декомпрессии, которые можно использовать при декомпрессии данных. Параметры необязательны; для любого пропущенного параметра значение будет выбрано автоматически.Метод
bounds()можно вызывать для любого атрибута, чтобы получить допустимые значения для этого параметра.Пример установки
window_log_maxна максимальный размер:data = compress(b'Some very long buffer of bytes...') _lower, upper = DecompressionParameter.window_log_max.bounds() options = {DecompressionParameter.window_log_max: upper} decompress(data, options=options)
- bounds()¶
Возвращает кортеж целочисленных границ
(lower, upper)параметра декомпрессии. Этот метод следует вызывать для того атрибута, границы которого требуется получить.Верхняя и нижняя границы включены.
- window_log_max¶
Двоичный логарифм максимального размера окна, используемого при декомпрессии. Это может быть полезно для ограничения объёма памяти, используемого при декомпрессии данных. Больший максимальный размер окна приводит к более быстрой декомпрессии.
Значение 0 приводит к автоматическому выбору значения.
- class compression.zstd.Strategy¶
IntEnum, содержащий стратегии сжатия. Стратегии с бо́льшими номерами соответствуют более сложному и медленному сжатию.Примечание
Значения атрибутов
Strategyне обязательно стабильны в разных версиях zstd. Можно полагаться только на порядок атрибутов. Атрибуты перечислены ниже по порядку.Доступны следующие стратегии:
- fast¶
- dfast¶
- greedy¶
- lazy¶
- lazy2¶
- btlazy2¶
- btopt¶
- btultra¶
- btultra2¶
Разное¶Miscellaneous
- compression.zstd.get_frame_info(frame_buffer)¶
Извлекает объект
FrameInfo, содержащий метаданные о фрейме Zstandard. Фреймы содержат метаданные, связанные с хранящимися в них сжатыми данными.
- class compression.zstd.FrameInfo¶
Метаданные, относящиеся к фрейму Zstandard.
- decompressed_size¶
Размер распакованных данных фрейма.
- dictionary_id¶
Целое число, представляющее идентификатор словаря Zstandard, необходимый для распаковки фрейма. Значение
0означает, что идентификатор словаря не был записан в заголовке фрейма. Это может означать, что словарь Zstandard не требуется, или что идентификатор необходимого словаря не был записан.
- compression.zstd.COMPRESSION_LEVEL_DEFAULT¶
Уровень сжатия по умолчанию для Zstandard:
3.
- compression.zstd.zstd_version_info¶
Номер версии библиотеки zstd времени выполнения в виде кортежа целых чисел (major, minor, release).
Примеры¶Examples
Чтение сжатого файла:
from compression import zstd
with zstd.open("file.zst") as f:
file_content = f.read()
Создание сжатого файла:
from compression import zstd
data = b"Insert Data Here"
with zstd.open("file.zst", "w") as f:
f.write(data)
Сжатие данных в памяти:
from compression import zstd
data_in = b"Insert Data Here"
data_out = zstd.compress(data_in)
Инкрементальное сжатие:
from compression import zstd
comp = zstd.ZstdCompressor()
out1 = comp.compress(b"Some data\n")
out2 = comp.compress(b"Another piece of data\n")
out3 = comp.compress(b"Even more data\n")
out4 = comp.flush()
# Объединить все частичные результаты:
result = b"".join([out1, out2, out3, out4])
Запись сжатых данных в уже открытый файл:
from compression import zstd
with open("myfile", "wb") as f:
f.write(b"This data will not be compressed\n")
with zstd.open(f, "w") as zstf:
zstf.write(b"This *will* be compressed\n")
f.write(b"Not compressed\n")
Создание сжатого файла с использованием параметров сжатия:
from compression import zstd
options = {
zstd.CompressionParameter.checksum_flag: 1
}
with zstd.open("file.zst", "w", options=options) as f:
f.write(b"Mind if I squeeze in?")