当前位置: 首页 > news >正文

Python标准库 zlib模块【数据压缩/解压】全面讲解

全面剖析大模型 图解大模型:生成式AI原理与实战 大语言模型大模型应用开发Transformer DeepSeek模型原理开发深度学习 图灵出品

大模型强化学习详解 大模型算法:强化学习、微调与对齐(全彩)详解强化学习 RLHF GRPO DPO SFT CoT DeepSeek蒸馏 微调与对齐 效果优化及其实践

大模型图书三剑客之 人工智能的底层逻辑 DeepSeek的逻辑 DeepSeek教程 阅读狂欢节

大模型语言模型理论全掌握 大规模语言模型:从理论到实践(第2版)详解LLM 预训练 指令微调 SFT 强化学习MoE 多模态 智能体 RAG 大模型效率优化DeepSeek推理模型 评估

AI大厂大模型面试宝典 百面大模型 大模型应用开发LLM提示工程师大模型面试题deepseek应用开发深度学习机器学习 图灵出品

AI时代已至,必须学起来了 人工智能:现代方法(第4版)复旦教授魏忠钰老师推荐 deepseek教程(异步图书出品)


zlib 是 Python 标准库中用于数据压缩/解压的模块,基于 DEFLATE 算法(结合 LZ77 和哈夫曼编码)。它广泛应用于网络传输、文件压缩(如 PNG 图像格式)等场景。


核心功能
  1. 压缩数据compress(data, level=-1)
  2. 解压数据decompress(data, wbits=15)
  3. 增量压缩/解压compressobj() / decompressobj()
  4. 校验和计算crc32(), adler32()

关键函数详解
1. 压缩数据
import zlibdata = b"Hello, this is a test string for zlib compression." * 10
compressed = zlib.compress(data, level=9)
  • level 参数(0-9):
    • 0:不压缩(仅添加头部)
    • 1:最快但压缩率低
    • 9:最慢但压缩率最高(默认 -1 ≈ 6)
2. 解压数据
decompressed = zlib.decompress(compressed)
assert data == decompressed  # 验证数据一致性
  • wbits 参数(控制头部格式):
    • 15:默认,使用 zlib 头部(RFC 1950)
    • 31:使用 gzip 头部(RFC 1952)
    • -15:原始 DEFLATE 数据(无头部)
3. 增量处理(流式操作)
# 增量压缩
compressor = zlib.compressobj(level=9)
chunks = []
for chunk in [data[:10], data[10:20], data[20:]]:chunks.append(compressor.compress(chunk))
chunks.append(compressor.flush())  # 必须调用!
compressed_stream = b"".join(chunks)# 增量解压
decompressor = zlib.decompressobj()
result = []
for chunk in [compressed_stream[i:i+10] for i in range(0, len(compressed_stream), 10)]:result.append(decompressor.decompress(chunk))
result.append(decompressor.flush())  # 处理剩余数据
decompressed_stream = b"".join(result)
4. 校验和计算
crc_val = zlib.crc32(data)  # CRC-32 校验(初始值 0)
adler_val = zlib.adler32(data, 1)  # Adler-32 校验(更高效)

高级用法
  1. 自定义字典(用于压缩特定类型数据)

    custom_dict = b"common_prefix_data"
    compressor = zlib.compressobj(zdict=custom_dict)
    decompressor = zlib.decompressobj(zdict=custom_dict)
    
  2. 内存控制

    # 设置解压缓冲区大小(避免大内存分配)
    decompressed = zlib.decompress(compressed, bufsize=4096)
    
  3. 异常处理

    try:zlib.decompress(b"invalid_data")
    except zlib.error as e:print("Decompression failed:", e)
    

典型应用场景
  1. HTTP 内容压缩(配合 gzip 模块)
  2. 数据库存储压缩
  3. 实时数据流压缩(如传感器数据)
  4. 文件格式处理(如 PNG、PDF)

性能注意事项
  • 压缩级别:高压缩级别(9)耗时可能增加 10 倍,但压缩率仅提升 5-10%。
  • 内存占用:大文件压缩时使用增量方法避免内存溢出。
  • 数据特性:文本数据压缩率可达 70-90%,已压缩数据(如 JPEG)可能反而增大。

与其他模块对比
模块特点适用场景
zlib轻量级,标准 RFC 支持通用数据压缩
gzip基于 zlib,支持文件操作.gz 文件处理
bz2更高压缩率,更慢高压缩比需求
lzma最高压缩率,极慢长期存储的归档文件

完整示例:文件压缩工具
def compress_file(input_path, output_path):with open(input_path, "rb") as f_in:data = f_in.read()compressed = zlib.compress(data, level=9)with open(output_path, "wb") as f_out:f_out.write(compressed)def decompress_file(input_path, output_path):with open(input_path, "rb") as f_in:compressed = f_in.read()data = zlib.decompress(compressed)with open(output_path, "wb") as f_out:f_out.write(data)

通过掌握 zlib,你可以高效处理数据压缩需求,平衡时间与空间成本。对于文件级操作,可结合 gzip 模块简化流程。

http://www.lryc.cn/news/573430.html

相关文章:

  • Python元组常用操作方法
  • 什么是跨域问题?后端如何解决跨域问题?
  • MCU量产高效烧录:BootLoader与App合并技巧
  • 【Python】正则表达式中的`^`和`[]`
  • 学c++ cpp 可以投递哪些岗位
  • 从0开始学习计算机视觉--Day02--数据驱动
  • MySQL误删数据急救指南:基于Binlog日志的实战恢复详解
  • Mac Parallels Desktop Kali 2025 代理设置
  • OpenAI与微软的未来合作之路:充满挑战的AI竞赛与共赢
  • YAML 数据格式详解
  • 计算机网络第九章——数据链路层《流量控制和可靠传输》
  • 基于SpringBoot+Uniapp的活动中心预约小程序(协同过滤算法、腾讯地图、二维码识别)
  • Docker镜像制作---指令
  • Qt输入数据验证的方法
  • rent8_wechat-最常用出租屋管理系统-微信小程序
  • 从零开发ComfyUI插件:打造你的AI绘画专属工具
  • 私有规则库:企业合规与安全的终极防线
  • C# 将 Enum枚举转成List,并显示在下拉列表中
  • LINUX621 NFS 同步 ;FTP;samba环境
  • 面试题-ts中的typeof
  • 面试题-把类型为b的值赋给类型为a的变量
  • Laravel 项目中图片上传后无法访问的问题
  • SQL关键字三分钟入门:INSERT INTO —— 插入数据详解
  • Python实现MySQL建表语句转换成Clickhouse SQL
  • 【格与代数系统】偏序关系、偏序集与全序集
  • 2048小游戏C++板来啦!
  • 【Docker基础】Docker镜像管理:docker rmi、prune详解
  • 竞业限制协议能单独充当商业秘密的 “保护伞” 吗?
  • docker执行yum报错Could not resolve host: mirrorlist.centos.org
  • python web开发-Flask 蓝图(Blueprints)完全指南