在Python中使用zlib模块进行数据压缩的教程
Python标准模块中,有多个模块用于数据的压缩与解压缩,如zipfile,gzip, bz2等等。上次介绍了zipfile模块,今天就来讲讲zlib模块。
zlib.compress(string[, level])
zlib.decompress(string[, wbits[, bufsize]])
zlib.compress用于压缩流数据。参数string指定了要压缩的数据流,参数level指定了压缩的级别,它的取值范围是1到9。压缩速度与压缩率成反比,1表示压缩速度最快,而压缩率最低,而9则表示压缩速度最慢但压缩率最高。zlib.decompress用于解压数据。参数string指定了需要解压的数据,wbits和bufsize分别用于设置系统缓冲区大小(window buffer )与输出缓冲区大小(output buffer)。下面用一个例子来演示如何使用这两个方法:
#coding=gbk import zlib, urllib fp = urllib.urlopen('http://localhost/default.html') str = fp.read() fp.close() #---- 压缩数据流。 str1 = zlib.compress(str, zlib.Z_BEST_COMPRESSION) str2 = zlib.decompress(str1) print len(str) print len(str1) print len(str2) # ---- 结果 #5783 #1531 #5783
我们也可以使用Compress/Decompress对象来对数据进行压缩/解压缩。zlib.compressobj([level]) 与zlib.decompress(string[, wbits[, bufsize]]) 分别创建Compress/Decompress缩对象。通过对象对数据进行压缩和解压缩的使用方式与上面介绍的zlib.compress,zlib.decompress非常类似。但两者对数据的压缩还是有区别的,这主要体现在对大量数据进行操作的情况下。假如现在要压缩一个非常大的数据文件(上百M),如果使用zlib.compress来压缩的话,必须先一次性将文件里的数据读到内存里,然后将数据进行压缩。这样势必会战用太多的内存。如果使用对象来进行压缩,那么没有必要一次性读取文件的所有数据,可以先读一部分数据到内存里进行压缩,压缩完后写入文件,然后再读其他部分的数据压缩,如此循环重复,只到压缩完整个文件。下面一个例子来演示这之间的区别:
#coding=gbk import zlib, urllib fp = urllib.urlopen('http://localhost/default.html') # 访问的到的网址。 data = fp.read() fp.close() #---- 压缩数据流 str1 = zlib.compress(data, zlib.Z_BEST_COMPRESSION) str2 = zlib.decompress(str1) print '原始数据长度:', len(data) print '-' * 30 print 'zlib.compress压缩后:', len(str1) print 'zlib.decompress解压后:', len(str2) print '-' * 30 #---- 使用Compress, Decompress对象对数据流进行压缩/解压缩 com_obj = zlib.compressobj(zlib.Z_BEST_COMPRESSION) decom_obj = zlib.decompressobj() str_obj = com_obj.compress(data) str_obj += com_obj.flush() print 'Compress.compress压缩后:', len(str_obj) str_obj1 = decom_obj.decompress(str_obj) str_obj1 += decom_obj.flush() print 'Decompress.decompress解压后:', len(str_obj1) print '-' * 30 #---- 使用Compress, Decompress对象,对数据进行分块压缩/解压缩。 com_obj1 = zlib.compressobj(zlib.Z_BEST_COMPRESSION) decom_obj1 = zlib.decompressobj() chunk_size = 30; #原始数据分块 str_chunks = [data[i * chunk_size:(i + 1) * chunk_size] / for i in range((len(data) + chunk_size) / chunk_size)] str_obj2 = '' for chunk in str_chunks: str_obj2 += com_obj1.compress(chunk) str_obj2 += com_obj1.flush() print '分块压缩后:', len(str_obj2) #压缩数据分块解压 str_chunks = [str_obj2[i * chunk_size:(i + 1) * chunk_size] / for i in range((len(str_obj2) + chunk_size) / chunk_size)] str_obj2 = '' for chunk in str_chunks: str_obj2 += decom_obj1.decompress(chunk) str_obj2 += decom_obj1.flush() print '分块解压后:', len(str_obj2) # ---- 结果 ------------------------ 原始数据长度: 5783 ------------------------------ zlib.compress压缩后: 1531 zlib.decompress解压后: 5783 ------------------------------ Compress.compress压缩后: 1531 Decompress.decompress解压后: 5783 ------------------------------ 分块压缩后: 1531 分块解压后: 5783
Python手册对zlib模块的介绍比较详细,更具体的应用,可以参考Python手册。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

VS Code 擴展存在惡意風險,例如隱藏惡意代碼、利用漏洞、偽裝成合法擴展。識別惡意擴展的方法包括:檢查發布者、閱讀評論、檢查代碼、謹慎安裝。安全措施還包括:安全意識、良好習慣、定期更新和殺毒軟件。

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。
