compression.zstd
--- 與 Zstandard 格式相容的壓縮¶
在 3.14 版本加入。
原始碼: Lib/compression/zstd/__init__.py
此模組提供了使用 Zstandard(或 zstd)壓縮演算法來壓縮和解壓縮資料的類和函式。zstd 手冊將 Zstandard 描述為“一種快速的無失真壓縮演算法,旨在實現 zlib 級別的即時壓縮場景和更好的壓縮率。”模組還包含一個檔案介面,支援讀寫由 zstd 工具建立的 .zst
檔案內容,以及原始的 zstd 壓縮流。
compression.zstd
模組包含:
用於增量(解)壓縮的
ZstdCompressor
和ZstdDecompressor
類。用於一次性(解)壓縮的
compress()
和decompress()
函式。用於訓練和管理 Zstandard 字典的
train_dict()
和finalize_dict()
函式以及ZstdDict
類。用於設定高階(解)壓縮引數的
CompressionParameter
、DecompressionParameter
和Strategy
類。
異常¶
- 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)¶
返回緩衝的資料而不移動檔案位置。除非已到達檔案末尾(EOF),否則將至少返回一個位元組的資料。返回的確切位元組數是未指定的(size 引數被忽略)。
- mode¶
讀取時為
'rb'
,寫入時為'wb'
。
在記憶體中壓縮和解壓縮資料¶
- compression.zstd.compress(data, level=None, options=None, zstd_dict=None)¶
壓縮 data(一個 類位元組物件),返回壓縮後的資料,為一個
bytes
物件。level 引數是一個控制壓縮級別的整數。level 是在 options 中設定
CompressionParameter.compression_level
的替代方法。在compression_level
上使用bounds()
來獲取可以為 level 傳遞的值。如果需要高階壓縮選項,必須省略 level 引數,並在 options 字典中設定CompressionParameter.compression_level
引數。options 引數是一個包含高階壓縮引數的 Python 字典。壓縮引數的有效鍵和值在
CompressionParameter
文件中有詳細說明。zstd_dict 引數是
ZstdDict
的一個例項,包含用於提高壓縮效率的訓練資料。可以使用train_dict()
函式生成 Zstandard 字典。
- 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 是在 options 中設定
CompressionParameter.compression_level
的替代方法。在compression_level
上使用bounds()
來獲取可以為 level 傳遞的值。如果需要高階壓縮選項,必須省略 level 引數,並在 options 字典中設定CompressionParameter.compression_level
引數。options 引數是一個包含高階壓縮引數的 Python 字典。壓縮引數的有效鍵和值在
CompressionParameter
文件中有詳細說明。zstd_dict 引數是
ZstdDict
的一個可選例項,包含用於提高壓縮效率的訓練資料。可以使用train_dict()
函式生成 Zstandard 字典。- compress(data, mode=ZstdCompressor.CONTINUE)¶
壓縮 data(一個 類位元組物件),如果可能,返回一個包含壓縮資料的
bytes
物件,否則返回一個空的bytes
物件。部分 data 可能會被內部緩衝,以供後續呼叫compress()
和flush()
時使用。返回的資料應與之前任何compress()
呼叫的輸出拼接起來。mode 引數是一個
ZstdCompressor
屬性,可以是CONTINUE
、FLUSH_BLOCK
或FLUSH_FRAME
。當所有資料都提供給壓縮器後,呼叫
flush()
方法來完成壓縮過程。如果以 mode 設定為FLUSH_FRAME
呼叫compress()
,則不應呼叫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¶
如果
decompress()
方法在需要新的壓縮輸入之前可以提供更多解壓縮資料,則為False
。
Zstandard 字典¶
- compression.zstd.train_dict(samples, dict_size)¶
訓練一個 Zstandard 字典,返回一個
ZstdDict
例項。Zstandard 字典可以更有效地壓縮小資料,這些資料傳統上由於重複性較少而難以壓縮。如果你要壓縮多個相似的資料組(例如相似的檔案),Zstandard 字典可以顯著提高壓縮率和速度。samples 引數(一個
bytes
物件的可迭代物件),是用於訓練 Zstandard 字典的樣本總體。dict_size 引數是一個整數,表示 Zstandard 字典的最大尺寸(以位元組為單位)。Zstandard 文件建議絕對最大值不超過 100 KB,但根據資料的不同,最大值通常可以更小。較大的字典通常會減慢壓縮速度,但能提高壓縮率。較小的字典壓縮速度更快,但會降低壓縮率。
- 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
物件。它與__init__
方法中的 dict_content 引數相同。它可以與其他程式一起使用,例如zstd
命令列程式。
- dict_id¶
Zstandard 字典的識別符號,一個非負整數值。
非零值表示該字典是普通的,由 Zstandard 函式建立並遵循 Zstandard 格式。
0
表示一個“原始內容”字典,沒有任何格式限制,供高階使用者使用。備註
ZstdDict.dict_id
為0
的含義不同於get_frame_info()
函式的dictionary_id
屬性。
- 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¶
壓縮器在壓縮資料時可以使用的最大允許反向引用距離,表示為2的冪,即
1 << window_log
位元組。此引數極大地影響壓縮的記憶體使用。更高的值需要更多記憶體,但能獲得更好的壓縮值。值為零會導致該值被自動選擇。
- hash_log¶
初始探測表的大小,表示為2的冪。最終的記憶體使用量為
1 << (hash_log+2)
位元組。對於 <=dfast
的策略,較大的表能提高壓縮率;對於 >dfast
的策略,能提高壓縮速度。值為零會導致該值被自動選擇。
- chain_log¶
多探測搜尋表的大小,表示為2的冪。最終的記憶體使用量為
1 << (chain_log+2)
位元組。較大的表能帶來更好但更慢的壓縮效果。此引數對fast
策略無效。在使用dfast
策略時仍然有用,此時它定義了一個次級探測表。值為零會導致該值被自動選擇。
- min_match¶
搜尋匹配的最小尺寸。較大的值會提高壓縮和解壓縮速度,但會降低壓縮率。請注意,Zstandard 仍然可以找到更小尺寸的匹配,它只是調整其搜尋演算法以尋找此尺寸及更大的匹配。對於所有 <
btopt
的策略,有效最小值為4
;對於所有 >fast
的策略,有效最大值為6
。值為零會導致該值被自動選擇。
- target_length¶
此欄位的影響取決於所選的
Strategy
。對於策略
btopt
、btultra
和btultra2
,該值是被認為“足夠好”以停止搜尋的匹配長度。較大的值會使壓縮率更好,但壓縮速度更慢。對於策略
fast
,它是匹配取樣的距離。較大的值會使壓縮更快,但壓縮率更差。值為零會導致該值被自動選擇。
- enable_long_distance_matching¶
長距離匹配可用於透過在更遠距離處找到大型匹配來提高大輸入的壓縮效果。它會增加記憶體使用量和視窗大小。
True
或1
啟用長距離匹配,而False
或0
停用它。啟用此引數會增加預設的
window_log
至 128 MiB,除非明確設定為不同值。如果window_log
>= 128 MiB 且壓縮策略 >=btopt
(壓縮級別 16+),則預設啟用此設定。
- ldm_hash_log¶
長距離匹配表的大小,表示為2的冪。較大的值會增加記憶體使用量和壓縮率,但會降低壓縮速度。
值為零會導致該值被自動選擇。
- ldm_min_match¶
長距離匹配器的最小匹配尺寸。過大或過小的值通常會降低壓縮率。
值為零會導致該值被自動選擇。
- ldm_bucket_size_log¶
長距離匹配器(long distance matcher)雜湊表中用於解決衝突的每個桶(bucket)大小的對數值。值越大,衝突解決能力越強,但會降低壓縮速度。
值為零會導致該值被自動選擇。
- ldm_hash_rate_log¶
向長距離匹配器雜湊表中插入/查詢條目的頻率。值越大,壓縮速度越快。與預設值偏離過大可能會導致壓縮率下降。
值為零會導致該值被自動選擇。
- content_size_flag¶
在壓縮前已知待壓縮資料大小時,將其寫入 Zstandard 幀頭。
此標誌僅在以下情況下生效:
呼叫
compress()
進行一次性壓縮。在單次
ZstdCompressor.compress()
呼叫中,以ZstdCompressor.FLUSH_FRAME
模式提供幀內所有待壓縮資料。在對當前幀進行任何
ZstdCompressor.compress()
呼叫之前,先呼叫ZstdCompressor.set_pledged_input_size()
並提供將要提供給壓縮器的確切資料量。必須為每個新幀呼叫ZstdCompressor.set_pledged_input_size()
。
所有其他壓縮呼叫可能不會將大小資訊寫入幀頭。
True
或1
啟用內容大小標誌,而False
或0
則停用它。
- checksum_flag¶
在每個幀的末尾寫入一個四位元組的校驗和,該校驗和使用 XXHash64 演算法計算未壓縮內容的雜湊值。Zstandard 的解壓程式碼會驗證此校驗和。如果不匹配,則會引發
ZstdError
異常。True
或1
啟用校驗和生成,而False
或0
則停用它。
- nb_workers¶
選擇要生成的並行壓縮執行緒數。當
nb_workers
> 0 時,啟用多執行緒壓縮。值為1
表示“單執行緒的多執行緒模式”。更多的執行緒可以提高速度,但也會增加記憶體使用量並輕微降低壓縮率。值為零則停用多執行緒。
- job_size¶
一個壓縮作業的大小,以位元組為單位。該值僅在
nb_workers
>= 1 時強制執行。每個壓縮作業都是並行完成的,因此該值可以間接影響活動執行緒的數量。值為零會導致該值被自動選擇。
- overlap_log¶
設定從先前作業(執行緒)中重新載入多少資料,以供新作業在壓縮期間通過後向查詢視窗(look behind window)使用。此值僅在
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¶
解壓期間使用的視窗最大尺寸的以 2 為底的對數。這對於限制解壓資料時使用的記憶體量很有用。較大的最大視窗尺寸可帶來更快的解壓速度。
值為零會導致該值被自動選擇。
雜項¶
- compression.zstd.get_frame_info(frame_buffer)¶
檢索一個包含 Zstandard 幀元資料的
FrameInfo
物件。幀包含與其所持有的壓縮資料相關的元資料。
- class compression.zstd.FrameInfo¶
與 Zstandard 幀相關的元資料。
- decompressed_size¶
幀解壓後內容的大小。
- dictionary_id¶
一個整數,表示解壓該幀所需的 Zstandard 字典 ID。
0
表示字典 ID 未記錄在幀頭中。這可能意味著不需要 Zstandard 字典,或者所需字典的 ID 沒有被記錄。
- 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?")