compression.zstd — сжатие, совместимое с форматом Zstandard
Добавлено в версии 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). Если вы являетесь поставщиком дистрибутива, см. раздел Требования к необязательным модулям.
Исключения
-
exception compression.zstd.ZstdError -
Это исключение возникает при ошибке во время сжатия или распаковки либо при инициализации состояния компрессора или декомпрессора.
Чтение и запись сжатых файлов
-
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) -
Возвращает буферизованные данные, не перемещая позицию в файле. Будет возвращён как минимум один байт данных, если не достигнут конец файла. Точное количество возвращённых байтов не определено (аргумент size игнорируется).
Примечание
Вызов
peek()не изменяет позицию в файле объектаZstdFile, но может изменить позицию базового файлового объекта (например, еслиZstdFileбыл создан с передачей файлового объекта в аргументе file).
-
mode -
'rb'для чтения и'wb'для записи.
-
name -
Имя файла Zstandard. Эквивалентно атрибуту
nameбазового файлового объекта.
-
Сжатие и распаковка данных в памяти
-
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.Попытка распаковать данные после конца кадра вызовет исключение
EOFError. Все данные после конца кадра игнорируются и сохраняются в атрибутеunused_data.
-
eof -
True, если достигнут маркер конца потока.
-
unused_data -
Данные, обнаруженные после конца сжатого потока.
До достижения конца потока это значение будет
b''.
-
needs_input -
False, если методdecompress()может предоставить дополнительные распакованные данные до того, как потребуются новые сжатые данные.
-
Словари Zstandard
-
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 (объект, похожий на объект bytes) — это уже обученная информация словаря.
Аргумент is_raw — логический параметр расширенной настройки, определяющий смысл dict_content.
Trueозначает, что dict_content — это словарь с «необработанным содержимым», не имеющий ограничений на формат.Falseозначает, что dict_content — обычный словарь Zstandard, созданный функциями Zstandard, напримерtrain_dict(), или внешней программой zstd CLI.При передаче
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и некоторые непубличные параметры.Нет
ZstdDictкэширует словарь внутри себяДа. Повторная загрузка подготовленного словаря с тем же уровнем сжатия выполняется быстрее.
Нет. Если требуется загрузить неподготовленный словарь несколько раз, рассмотрите возможность повторного использования объекта компрессора.
Если передать
ZstdDictбез каких-либо атрибутов, при сжатии по умолчанию передается неподготовленный словарь, а при распаковке при необходимости создается и передается подготовленный словарь.-
dict_content -
Содержимое словаря Zstandard — объект
bytes. Оно совпадает с аргументом dict_content метода__init__. Его можно использовать с другими программами, например с программой CLIzstd.
-
dict_id -
Идентификатор словаря Zstandard — неотрицательное целое число.
Ненулевое значение означает, что словарь является обычным, созданным функциями Zstandard и соответствующим формату Zstandard.
0означает словарь с «необработанным содержимым», не имеющий ограничений на формат и предназначенный для опытных пользователей.Примечание
Значение
0дляZstdDict.dict_idотличается от значения атрибутаdictionary_idфункцииget_frame_info().
-
as_digested_dict -
Загрузить как подготовленный словарь.
-
as_undigested_dict -
Загрузить как неподготовленный словарь.
-
Управление расширенными параметрами
-
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() -
Возвращает кортеж целочисленных границ,
(lower, upper), параметра сжатия. Этот метод следует вызывать для атрибута, границы которого требуется получить. Например, чтобы узнать допустимые значения дляcompression_level, можно проверить результатCompressionParameter.compression_level.bounds().Нижняя и верхняя границы включаются в диапазон.
-
compression_level -
Высокоуровневый способ задания других параметров сжатия, влияющих на скорость и степень сжатия данных.
Обычные уровни сжатия выше
0. Значения выше20считаются уровнями «ультра» и требуют больше памяти, чем другие уровни. Отрицательные значения позволяют повысить скорость сжатия за счет снижения его степени.При установке уровня, равного нулю, используется
COMPRESSION_LEVEL_DEFAULT.
-
window_log -
Максимально допустимое расстояние обратной ссылки, которое компрессор может использовать при сжатии данных; выражается как степень двойки,
1 << window_logбайт. Этот параметр существенно влияет на объем памяти, используемой при сжатии. Более высокие значения требуют больше памяти, но обеспечивают лучшее сжатие.При значении ноль параметр выбирается автоматически.
-
hash_log -
Размер начальной таблицы поиска, выраженный как степень двойки. Получившийся объем используемой памяти составляет
1 << (hash_log+2)байт. Более крупные таблицы повышают степень сжатия стратегий <=dfastи увеличивают скорость сжатия стратегий >dfast.При значении ноль параметр выбирается автоматически.
-
chain_log -
Размер таблицы поиска с несколькими пробами, выраженный как степень двойки. Получившийся объем используемой памяти составляет
1 << (chain_log+2)байт. Более крупные таблицы обеспечивают лучшее, но более медленное сжатие. Этот параметр не влияет на стратегиюfast. Он по-прежнему полезен при использовании стратегииdfast, для которой он задает вторичную таблицу поиска.При значении ноль параметр выбирается автоматически.
-
search_log -
Количество попыток поиска, выраженное как степень двойки. Большее количество попыток повышает степень сжатия, но замедляет его. Этот параметр не имеет значения для стратегий
fastиdfast.При значении ноль параметр выбирается автоматически.
-
min_match -
Минимальный размер совпадений, которые ищутся. Более высокие значения повышают скорость сжатия и распаковки, но снижают степень сжатия. Обратите внимание: Zstandard по-прежнему может находить совпадения меньшего размера; алгоритм поиска лишь настраивается на поиск совпадений заданного размера и больше. Для всех стратегий <
btoptэффективный минимум равен4; для всех стратегий >fastэффективный максимум равен6.При значении ноль параметр выбирается автоматически.
-
target_length -
Влияние этого поля зависит от выбранной
Strategy.Для стратегий
btopt,btultraиbtultra2это значение задает длину совпадения, считающегося «достаточно хорошим» для прекращения поиска. Более высокие значения повышают степень сжатия, но замедляют его.Для стратегии
fastэто расстояние между выборками совпадений. Более высокие значения ускоряют сжатие, но снижают его степень.При значении ноль параметр выбирается автоматически.
-
strategy -
Чем выше значение выбранной стратегии, тем сложнее метод сжатия, используемый zstd; это повышает степень сжатия, но замедляет его.
См. также
-
enable_long_distance_matching -
Сопоставление на больших расстояниях позволяет улучшить сжатие больших входных данных за счет поиска длинных совпадений на большем расстоянии. Оно увеличивает потребление памяти и размер окна.
Trueили1включают сопоставление на больших расстояниях, аFalseили0отключают его.Включение этого параметра увеличивает значение
window_logпо умолчанию до 128 МиБ, если явно не задано другое значение. Этот параметр включен по умолчанию, еслиwindow_log>= 128 МиБ, а стратегия сжатия >=btopt(уровень сжатия 16+).
-
ldm_hash_log -
Размер таблицы для сопоставления на больших расстояниях, выраженный как степень двойки. Более высокие значения увеличивают потребление памяти и степень сжатия, но снижают скорость сжатия.
При значении ноль параметр выбирается автоматически.
-
ldm_min_match -
Минимальный размер совпадения для сопоставления на больших расстояниях. Более высокие или слишком низкие значения часто могут снизить степень сжатия.
При значении ноль параметр выбирается автоматически.
-
ldm_bucket_size_log -
Логарифм размера каждого сегмента хеш-таблицы сопоставления на больших расстояниях, используемой для разрешения коллизий. Более высокие значения улучшают разрешение коллизий, но снижают скорость сжатия.
При значении ноль параметр выбирается автоматически.
-
ldm_hash_rate_log -
Частота добавления и поиска записей в хеш-таблице сопоставления на больших расстояниях. Более высокие значения повышают скорость сжатия. Значительное отклонение от значения по умолчанию, скорее всего, приведет к снижению степени сжатия.
При значении ноль параметр выбирается автоматически.
-
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. Каждое задание на сжатие выполняется параллельно, поэтому это значение может косвенно влиять на количество активных потоков.При значении ноль параметр выбирается автоматически.
-
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 -
Двоичный логарифм максимального размера окна, используемого при распаковке. Это может быть полезно для ограничения объема памяти, используемой при распаковке данных. Более высокий максимальный размер окна повышает скорость распаковки.
При значении ноль параметр выбирается автоматически.
-
-
class compression.zstd.Strategy -
IntEnum, содержащий стратегии сжатия. Стратегии с более высокими номерами соответствуют более сложному и медленному сжатию.Примечание
Значения атрибутов
Strategyне обязательно остаются неизменными в разных версиях zstd. Можно полагаться только на порядок атрибутов. Ниже атрибуты перечислены по порядку.Доступны следующие стратегии:
-
fast
-
dfast
-
greedy
-
lazy
-
lazy2
-
btlazy2
-
btopt
-
btultra
-
btultra2
-
Разное
-
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 во время выполнения в виде кортежа целых чисел (основная версия, дополнительная версия, выпуск).
Примеры
Чтение сжатого файла:
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() # Concatenate all the partial results: 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?")
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/compression.zstd.html