亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python壓縮和解壓縮模塊之zlib的用法

 更新時(shí)間:2022年09月26日 16:54:01   作者:微小冷  
這篇文章主要介紹了python壓縮和解壓縮模塊之zlib的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python壓縮和解壓縮模塊之zlib

由于早期的zlib和Python之間不兼容,故推薦1.1.4以后的版本。導(dǎo)入zlib后可以查看版本號(hào)

>>> import zlib
>>> zlib.ZLIB_VERSION
'1.2.11'
>>> zlib.ZLIB_RUNTIME_VERSION
'1.2.11'

zlib中封裝了兩對(duì)壓縮和解壓的函數(shù)

壓縮解壓
compressdecompress
compressobjdecompressobj

其中compress和decompress比較簡(jiǎn)單,二者聲明為

zlib.compress(data, level=-1)
zlib.decompress(data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)

即分別對(duì)data進(jìn)行壓縮和解壓。

其中l(wèi)evel為整數(shù),用于指定壓縮等級(jí),決定壓縮后文件的大小,取值為-1到9。

zlib中內(nèi)置了四個(gè)常量,用以表示四種情況。

  壓縮模式
1Z_BEST_SPEED最快速度和最低壓縮率
9Z_BEST_COMPRESSION最慢速度最高壓縮率
0Z_NO_COMPRESSION不壓縮
-1Z_DEFAULT_COMPRESSION一般相當(dāng)于設(shè)壓縮等級(jí)為6

解壓函數(shù)中的wbits控制歷史緩沖區(qū)的大?。ɑ蚍Q“窗口大小”)以及所期望的頭部和尾部格式。

默認(rèn)為MAX_WBITS,其取值范圍和含義如下

 包含頭尾 
+8至+15必須窗口尺寸以二為底的對(duì)數(shù)。輸入必須包含zlib頭部和尾部。
0必須含頭根據(jù) zlib 頭部自動(dòng)確定窗口大小
−8至−15無(wú)頭尾使用wbits絕對(duì)值作為窗口大小以二為底的對(duì)數(shù)
+24至+31必須包含使用后4個(gè)比特位作為窗口大小以二為底的對(duì)數(shù)。
+40 至+47自動(dòng)使用后4個(gè)比特位作為窗口大小以二為底的對(duì)數(shù)

bufsize是表示緩沖區(qū)初始大小,默認(rèn)為DEF_MEM_LEVEL,由于在解壓過(guò)程中會(huì)自動(dòng)調(diào)節(jié),故不必完全精確。

例如:

>>> x = b'abcdefghijk'*100
>>> x0 = compress(x,0) 
>>> x1 = compress(x,1) 
>>> x9 = compress(x,9) 
>>> print(len(x),len(x0), len(x1), len(x9))
1100 1111 32 29 #無(wú)壓縮時(shí)得到的數(shù)據(jù)比原始數(shù)據(jù)還大
>>> d1 = decompress(x9) #解壓縮
>>> d1 == x
True
  • compressobjdecompressobj分別返回一個(gè)壓縮對(duì)象和解壓對(duì)象。
  • compressobj返回一個(gè) 壓縮對(duì)象,用來(lái)壓縮內(nèi)存中難以容下的數(shù)據(jù)流,聲明如下
compressobj(level=-1, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY[, zdict])

其中l(wèi)evel為壓縮級(jí)別,和前文一樣取值為 -1 到 9;method 表示壓縮算法,現(xiàn)在只支持 DEFLATED;memLevel指定內(nèi)部壓縮操作時(shí)所占用內(nèi)存大小。參數(shù)取 1 到 9,默認(rèn)DEF_MEM_LEVEL,取值越大越占內(nèi)存,但速度更快。

wbits 和decompress中相似,但取值范圍更少,默認(rèn)是15(MAX_WBITS)。

參數(shù)范圍如下:

  
+9 至 +15窗口大小以二為底的對(duì)數(shù)。 即這些值對(duì)應(yīng)著 512 至 32768 的窗口大小。 更大的值會(huì)提供更好的壓縮,同時(shí)內(nèi)存開(kāi)銷也會(huì)更大。 壓縮輸出會(huì)包含 zlib 特定格式的頭部和尾部。
−9 至 −15絕對(duì)值為窗口大小以二為底的對(duì)數(shù)。 壓縮輸出僅包含壓縮數(shù)據(jù),沒(méi)有頭部和尾部。
+25 至 +31后 4 個(gè)比特位為窗口大小以二為底的對(duì)數(shù)。 壓縮輸出包含一個(gè)基本的 gzip 頭部,并以校驗(yàn)和為尾部。
  • strategy 用于調(diào)節(jié)壓縮算法,默認(rèn)即可。
  • zdict 指定預(yù)定義的壓縮字典。是一個(gè)字節(jié)序列,其中包含用戶認(rèn)為要壓縮的數(shù)據(jù)中可能頻繁出現(xiàn)的子序列。頻率高的子序列應(yīng)當(dāng)放在字典的尾部。

除了壓縮和解壓縮,zlib還提供了兩個(gè)數(shù)據(jù)校驗(yàn)的函數(shù),

函數(shù)算法 
zlib.adler32Adler-32校驗(yàn) 
zlib.crc32CRC(循環(huán)冗余)校驗(yàn) 

二者均輸入數(shù)據(jù)和校驗(yàn)起始值,校驗(yàn)起始值value默認(rèn)為1。這兩個(gè)函數(shù)僅為驗(yàn)證數(shù)據(jù)的正確性,均無(wú)加密強(qiáng)度,不適合做密碼。

>>> zlib.adler32(b'abcdefghijk')
434701411
>>> zlib.crc32(b'abcdefghijk')
3461812127

python中zlib庫(kù)用法

zlib主要用于壓縮與解壓縮

  • 字符串:使用zlib.compress可以壓縮字符串。使用zlib.decompress可以解壓字符串。
  • 數(shù)據(jù)流:壓縮:compressobj,解壓:decompressobj

示例代碼:

import zlib
 
data = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz' \
       'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'
print(len(data))
print(data)
 
# 壓縮
compressed_data = zlib.compress(data.encode())  # 注意:這兒要以字節(jié)的形式傳入
print(len(compressed_data))
print(compressed_data)
 
# 解壓
new_data = zlib.decompress(compressed_data).decode()
print(len(new_data))
print(new_data)

運(yùn)行結(jié)果:

示例代碼2:

import zlib
 
 
# 壓縮文件或數(shù)據(jù)
def compress_data(file, zip_file, level=9):
    file = open(file, 'rb')
    zip_file = open(zip_file, 'wb')
    compress = zlib.compressobj(level)
    data = file.read(1024)
    while data:
        zip_file.write(compress.compress(data))
        data = file.read(1024)
    zip_file.write(compress.flush())
    file.close()
    zip_file.close()
 
 
# 解壓文件或數(shù)據(jù)
def decompress_data(zip_file, new_file):
    zip_file = open(zip_file, 'rb')
    new_file = open(new_file, 'wb')
    decompress = zlib.decompressobj()
    data = zip_file.read(1024)
    while data:
        new_file.write(decompress.decompress(data))
        data = zip_file.read(1024)
    new_file.write(decompress.flush())
    zip_file.close()
    new_file.close()
 
 
if __name__ == '__main__':
    file = 'text.txt'
    zip_file = 'text_zip.txt'
    compress_data(file, zip_file)
 
    new_file = 'test_new.txt'
    decompress_data(zip_file, new_file)
    print('end!')

運(yùn)行結(jié)果:

注意:

compressobj返回一個(gè)壓縮對(duì)象,用來(lái)壓縮不能一下子讀入內(nèi)存的數(shù)據(jù)流。

level 從9到-1表示壓縮等級(jí),其中1最快但壓縮度最小,9最慢但壓縮度最大,0不壓縮,默認(rèn)是-1大約相當(dāng)于與等級(jí)6,是一個(gè)壓縮速度和壓縮度適中的level。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一行Python代碼制作動(dòng)態(tài)二維碼的實(shí)現(xiàn)

    一行Python代碼制作動(dòng)態(tài)二維碼的實(shí)現(xiàn)

    這篇文章主要介紹了一行Python代碼制作動(dòng)態(tài)二維碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python中int()函數(shù)的用法淺析

    Python中int()函數(shù)的用法淺析

    這篇文章主要介紹了Python中int()函數(shù)的用法淺析的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • Python調(diào)用C/C++的方法解析

    Python調(diào)用C/C++的方法解析

    這篇文章主要介紹了Python調(diào)用C/C++的方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 如何用Python 加密文件

    如何用Python 加密文件

    這篇文章主要介紹了如何用Python 加密文件,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python實(shí)現(xiàn)動(dòng)態(tài)添加類的屬性或成員函數(shù)的解決方法

    Python實(shí)現(xiàn)動(dòng)態(tài)添加類的屬性或成員函數(shù)的解決方法

    這篇文章主要介紹了Python實(shí)現(xiàn)動(dòng)態(tài)添加類的屬性或成員函數(shù)的解決方法,在類似插件開(kāi)發(fā)的時(shí)候會(huì)比較有用,需要的朋友可以參考下
    2014-07-07
  • 在Python中使用模塊的教程

    在Python中使用模塊的教程

    這篇文章主要介紹了在Python中使用模塊的教程,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • Django中modelform組件實(shí)例用法總結(jié)

    Django中modelform組件實(shí)例用法總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于Django中modelform組件實(shí)例用法內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2020-02-02
  • TensorFlow人工智能學(xué)習(xí)Keras高層接口應(yīng)用示例

    TensorFlow人工智能學(xué)習(xí)Keras高層接口應(yīng)用示例

    這篇文章主要為大家介紹了TensorFlow人工智能學(xué)習(xí)中Keras高層接口的應(yīng)用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • 使用python調(diào)用zxing庫(kù)生成二維碼圖片詳解

    使用python調(diào)用zxing庫(kù)生成二維碼圖片詳解

    本篇文章主要介紹了使用python調(diào)用zxing庫(kù)生成二維碼圖片,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 支持python的分布式計(jì)算框架Ray詳解

    支持python的分布式計(jì)算框架Ray詳解

    Ray是一種分布式執(zhí)行框架,便于大規(guī)模應(yīng)用程序和利用先進(jìn)的機(jī)器學(xué)習(xí)庫(kù),今天給大家分享支持python的分布式計(jì)算框架Ray詳解,感興趣的朋友一起看看吧
    2021-07-07

最新評(píng)論