Python3之数据压缩模块

本文介绍了Python3中的数据压缩模块,包括zlib、gzip、bz2和tarfile。详细阐述了zlib的字符串压缩与解压,以及文件的分块压缩;gzip和bz2的压缩解压操作;同时讲解了tarfile模块在压缩和解压文件及文件夹上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

针对数据压缩和解压需求,Python3提供了以下模块:zlib、gzip、bz2、zipfile和tarfile,这些模块可直接支持通用的数据打包和压缩格式

二、zlib压缩和解压

2.1、压缩和解压字符串
压缩:使用zlib.compress可以压缩字符串,格式为:zlib.compress(message , level)
参数说明:

message :参数message代表要压缩的内容,bytes类型;
level:参数level指定了压缩的级别,level 从9到-1表示压缩等级,其中1最快但压缩度最小,9最慢但压缩度最大,0不压缩,默认是-1,大约相当于等级6,是一个压缩速度和压缩度适中的level;

解压:使用zlib.decompress可以解压字符串,格式为:zlib.descompress(message)
参数说明:

message :参数message代表要解压的内容

"""
1、压缩和解压字符串
zlib.compress(message , level)压缩字符串
zlib.descompress(message)解压字符串
"""

import zlib

str = "zlib.compress(message , level)压缩字符串;zlib.descompress(message)解压字符串".encode("utf-8")
print("压缩前字符串为:" , str)
print("压缩前字符串长度:" , len(str))
# zlib.compress(message , level)压缩字符串
str_compress = zlib.compress(str , 9)
print("压缩后字符串为:" , str_compress)
print("压缩后字符串长度:" , len(str_compress))

# zlib.descompress(message)解压字符串
str_descompress = zlib.decompress(str_compress)
print("解压后字符串为:" , str_descompress)
print("解压后字符串长度:" , len(str_descompress))
压缩前字符串为: b'zlib.compress(message , level)\xe5\x8e\x8b\xe7\xbc\xa9\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xef\xbc\x9bzlib.descompress(message)\xe8\xa7\xa3\xe5\x8e\x8b\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
压缩前字符串长度: 88
压缩后字符串为: b'x\xda\xab\xca\xc9L\xd2K\xce\xcf-(J-.\xd6\xc8\x05\x12\x89\xe9\xa9\n:\n9\xa9e\xa99\x9aO\xfb\xba\x9f\xefY\xf9t\xed\xf4\xe7k\x96=\xd9\xb1\xe9\xfd\x9e\xd9U \xf5)\xa9\xc5\xe8Z4_,_\x0cT\rW\n\x00,A,\xe3'
压缩后字符串长度: 73
解压后字符串为: b'zlib.compress(message , level)\xe5\x8e\x8b\xe7\xbc\xa9\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xef\xbc\x9bzlib.descompress(message)\xe8\xa7\xa3\xe5\x8e\x8b\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
解压后字符串长度: 88
2.2、压缩和解压文件(分块压缩数据)
压缩:使用zlib.compressobj可以压缩文件,格式为:zlib.compressobj( source_file ,target_file , level)
参数说明:

source_file :参数source_file代表要压缩的源文件,bytes类型读文件;
target_file :参数target_file 代表压缩后的存储文件,bytes类型写文件;
level:参数level指定了压缩的级别,level 从9到-1表示压缩等级,其中1最快但压缩度最小,9最慢但压缩度最大,0不压缩,默认是-1,大约相当于等级6,是一个压缩速度和压缩度适中的level;

解压:使用zlib.decompressobj可以解压文件夹,格式为:zlib.descompressobj( source_file ,target_file )
参数说明:

source_file :参数source_file代表要压缩的源文件,bytes类型读文件;
target_file :参数target_file 代表压缩后的存储文件,bytes类型写文件;

注意:

compressobj()方法相对比compress()方法来说,compressobj()方法返回的是压缩对象,和compress()方法的区别为:一次压缩无法放入内存的数据流(即分批次压缩)
compressobj(level=-1, method=DEFLATED, wbits=15, memLevel=8, strategy=Z_DEFAULT_STRATEGY)
主要参数如下:
level:参数level指定了压缩的级别,level 从9到-1表示压缩等级,其中1最快但压缩度最小,9最慢但压缩度最大,0不压缩,默认是-1,大约相当于等级6,是一个压缩速度和压缩度适中的level;
wbits:窗口缓冲区大小的基本两倍对数,这是从8到15的整数,较高的值会提供更好的压缩效果,但会使用更多的内存;
memLevel:参数控制用于内部压缩状态的内存量,有效值范围从1到9,较高的值使用更多的内存,但更快并产生较小的输出;

import zlib
from urllib import request

# 压缩和解压字符串
def str_zlib(url):
    # 返回 urllib.request.Request类
    Request = request.Request(url)
    # 返回 HTTPResposne 类型
    HTTPResposne = request.urlopen(Request)
    # 解码 HTTPResposne,bytes类型
    bytes_message = HTTPResposne.read()
    # 转化为str
    str_message = bytes_message.decode()
    # bytes类型字符串压缩
    compressed = zlib.compress(bytes_message, level=9)
    # bytes类型字符串解压 , bytes类型
    decompressed = zlib.decompress(compressed)
    print("original string:",</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值