原文链接:http://www.juzicode.com/python-module-gzip
Python的gzip模块是标准库中用于处理gzip格式压缩文件的工具,提供了高效的文件压缩与解压功能,支持多级压缩比设置和流式处理,特别适合处理单个大型文本文件。
应用场景
- 压缩大型日志文件节省存储空间
- Web服务器响应gzip压缩内容处理
- 数据传输前的实时压缩
- 科学计算数据的压缩存储
- 与tar结合实现多文件归档压缩
- 网络爬虫处理压缩的网页内容
模块导入
import gzip
import shutil # 用于高级文件操作
使用方法
1)创建gzip文件
# juzicode.com/VX公众号:juzicode
import gzip
# 直接写入压缩内容
with gzip.open('example.txt.gz', 'wt', encoding='utf-8') as gz_file:
gz_file.write("这是使用gzip压缩的文本内容\n")
gz_file.write("第二行测试数据\n")
print("gzip文件创建成功")
运行结果:生成example.txt.gz文件

2)读取gzip文件内容
# juzicode.com/VX公众号:juzicode
import gzip
# 读取压缩文件内容
with gzip.open('example.txt.gz', 'rt', encoding='utf-8') as gz_file:
content = gz_file.read()
print("gzip文件内容:\n", content)
运行结果:输出解压后的原始内容
3)压缩现有文件
# juzicode.com/VX公众号:juzicode
import gzip
import shutil
# 压缩现有文件
with open('source.log', 'rb') as f_in:
with gzip.open('source.log.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
print("文件压缩成功")
运行结果:生成source.log.gz压缩文件

4)解压gzip文件
# juzicode.com/VX公众号:juzicode
import gzip
import shutil
# 解压到新文件
with gzip.open('source.log.gz', 'rb') as f_in:
with open('decompressed.log', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
print("文件解压成功")
运行结果:生成解压后的decompressed.log文件
5)检查gzip文件完整性
# juzicode.com/VX公众号:juzicode
import gzip
def check_gzip_integrity(gzip_path):
"""检查gzip文件是否损坏"""
try:
with gzip.open(gzip_path) as f:
while f.read(1024 * 1024): # 每次读取1MB
pass
print("gzip文件完整无损坏")
except OSError as e:
print(f"文件损坏: {str(e)}")
# 使用示例
check_gzip_integrity('example.txt.gz')
运行结果:验证文件完整性
6)自定义压缩级别
# juzicode.com/VX公众号:juzicode
import gzip
# 使用不同压缩级别 (0-9, 9为最高压缩)
with open('large_data.xlsx', 'rb') as f_in:
with gzip.open('high_compression-level9.xlxs.gz', 'wb', compresslevel=9) as f_out:
f_out.writelines(f_in)
with open('large_data.xlsx', 'rb') as f_in:
with gzip.open('high_compression-level1.xlxs.gz', 'wb', compresslevel=1) as f_out:
f_out.writelines(f_in)
print("不同压缩级别文件创建完成")

7)内存中压缩数据
# juzicode.com/VX公众号:juzicode
import gzip
# 压缩字节数据
data = b"need to compressed" * 1000
compressed = gzip.compress(data)
print(f"原始大小: {len(data)}, 压缩后: {len(compressed)}")
# 解压缩
decompressed = gzip.decompress(compressed)
print("解压验证:", data == decompressed)
运行结果:
原始大小: 18000, 压缩后: 96
解压验证: True
总结
gzip模块核心优势:
- 专为处理gzip格式优化,压缩效率高
- 支持从0(不压缩)到9(最高压缩)的压缩级别
- 提供类似普通文件的API接口,学习成本低
- 支持文本和二进制模式
- 内存操作函数适合网络传输场景
注意事项:
- 主要用于单个文件,多文件需结合tar模块
- 压缩级别越高,CPU占用越高
- 文本模式需明确指定编码
- 大文件处理时推荐使用流式方法
- 不支持密码保护等安全特性