zlib 字符串:使用zlib.compress可以压缩字符串。使用zlib.decompress可以解压字符串。 数据流:压缩:compressobj,解压:decompressobj import zlib import time s='aldsfjdals拉萨的附近拉水电费拉克丝等级分sdfgfsdgsdfg ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd类的撒酒疯拉萨的解放路'.encode('utf-8') #需要转成bytes类型: for i in range(0,15): s+=s print(len(s)) #--------------------------------------------------- str_time=time.time() compress_str = zlib.compress(s)#进行压缩 print(len(compress_str)) #print(zlib.decompress(compress_str).decode('utf-8'))#数据解压 print(time.time()-str_time) #------------------------------------------------- str_obj=time.time() level=9 c_obj = zlib.compressobj(level)#设置压缩等级 com_obj_str = c_obj.compress(s) print(len(com_obj_str)) print(time.time()-str_obj) # 7995392 # 31149 # 0.12890625 # 16425 # 0.1015625 注:compressobj返回一个压缩对象,用来压缩不能一下子读入内存的数据流。 level 从9到-1表示压缩等级,其中1最快但压缩度最小,9最慢但压缩度最大,0不压缩,默认是-1大约相当于与等级6,是一个压缩速度和压缩度适中的level。
压缩内存中的二进制流
from io import BytesIO
import zlib
b_memory= BytesIO()
b_memory.write("很多数据sldkfjlsakjfsldakjflasjflaskdj".encode('utf-8'))
compress_str = zlib.compress(b_memory.getvalue())
print(compress_str)
print(zlib.decompress(compress_str).decode('utf-8'))
数据流压缩和实际应用
from io import BytesIOimport xlsxwriter as xwimport zlibbytesio = BytesIO()workbook = xw.Workbook(bytesio) work_sheet = workbook.add_worksheet('excel')merge_format=workbook.add_format( { "bold":True, "bg_color":"red", "valign":"top" })for row in range(10): for col in range(10): work_sheet.write(row,col,"需要写入的内容",merge_format) workbook.close() file_bytes = bytesio.getvalue()print("文件大小:{}".format(len(file_bytes)))with open('save.xlsx','wb') as f: f.write(file_bytes) f.flush() compress_file_bytes = zlib.compress(file_bytes,9)print("文件大小:{}".format(len(compress_file_bytes)))