Python学习笔记24:进阶篇(十三)常见标准库使用之数据压缩功能模块zlib,gzip,bz2,lzma的学习使用

Python中使用zlib库实现字符串的压缩和解压缩是一种常见的操作 Python中使用zlib库实现字符串的压缩和解压缩是一种常见的操作。zlib库提供了一组函数,可以方便地对字符串进行压缩和解压缩操作。下面是一个详细的示例,展示了如何使用zlib库进行字符串的压缩和解压缩。 阅读详情

前言

本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。

根据模块知识,一次讲解单个或者多个模块的内容。

教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html

数据压缩

很多时候我们可以利用的内存有限,时间有限,资源有限,但是又不得不进行一些大量数据的操作时,我们可以通过压缩的方式灵活高效地处理数据存储和传输问题,优化应用性能。
在Python中,通过特定的算法,将原始数据转换成一个更紧凑的形式,这个过程称为压缩;而将压缩后的数据恢复到原始形式的过程则称为解压缩。这里简单了解一些这些模块后,一个个进行学习使用。

  1. zlib:
    介绍:zlib 模块提供了对 zlib 压缩库的接口,支持 gzip 文件格式的压缩和解压缩。
    功能:可以用于数据的简单压缩和解压缩,常用于需要快速压缩速度和相对较高压缩率的场合。
    常用函数:compress(), decompress(), crc32() 等。
  2. gzip:
    介绍:gzip 模块允许你使用 gzip 文件格式进行压缩和解压缩操作。
    功能:提供了文件对象(如 GzipFile)来处理 .gz 文件,可以透明地读写压缩文件,就像它们是普通文件一样。
    常用类:GzipFile 类用于创建或读取 gzip 格式的文件。
  3. bz2:
    介绍:此模块提供了对 bzip2 压缩算法的支持。
    功能:相较于 zlib,bzip2 提供了更高的压缩比,但压缩速度较慢。适用于需要高压缩比而时间不是关键因素的场景。
    常用类:BZ2File 类用于读写 bzip2 格式的文件。
  4. lzma:
    介绍:lzma 模块提供了对 LZMA (Lempel-Ziv-Markov chain Algorithm) 压缩算法的支持,这是 xz 文件格式的基础。
    功能:LZMA 提供了非常高的压缩比,特别适合于大文件的压缩。它在解压速度上也表现良好。
    常用类:LZMAFile 类用于读写 xz 格式的文件,以及相关的压缩和解压缩函数。
    这些模块使得Python能够方便地处理各种常见的压缩格式,满足不同的数据压缩需求。

zlib

zlib模块是Python的标准库之一,它提供了对zlib压缩库的接口,支持DEFLATE压缩算法,这是一种广泛使用的数据压缩算法,也是gzip、zip等文件格式的基础。zlib模块主要用于需要快速压缩速度和相对较高压缩率的场合,比如网络数据传输、文件存储等。

压缩与解压

import zlib

data = b"This is an example of compressed data."
# 压缩
compressed_data = zlib.compress(data)
# 解压
decompressed_data = zlib.decompress(compressed_data)
print(decompressed_data.decode())

在这里插入图片描述

通过输出可以看出,字符串压缩再解压后打印,并没有什么影响。

这里单独要讲2个点。

  1. 字符串前面的b是什么?
    这个b表示后面的字符串会被处理成一个字节串。因为compress函数的入参就是一个字节串,直接传入字符串是不行的。为什么字节串可以字符串不行呢?因为zlib这个模块处理的就是原始的二进制数据,而不是文本字符串。字符串在计算机内存中是以特定的字符编码(如UTF-8)表示的,而压缩算法直接作用于这些二进制表示上。
    有没有类似的写法呢?这里随便讲几个,以后遇到这种类似的写法可以查查资料学习一下:

    字符串前的u前缀(Python 2中):在Python 2中,字符串前加u表示创建一个Unicode字符串。例如,u"Hello, World!"。Python 3中默认字符串就是Unicode,因此不再需要u前缀。

    字符串前的r前缀:表示创建一个原始字符串(rawstring),其中的转义字符不会被处理。这在编写正则表达式或Windows文件路径时特别有用。例如,r"C:\path\to\file.txt"。

    字符串前的f前缀:这个就不用多讲了,格式化字符串,用来替换字符串中某些特定的值

  2. 怎么压缩中文?
    这个问题其实和1有关,还是那句话。这个模块处理的是二进制数据,所以要压缩中文,先把中文转成二进制数据就好了。

    # 待压缩的字符串
    text = '大家好,我是明月望秋思'
    
    # 将字符串转换为字节串(这里使用UTF-8编码)
    data = text.encode('utf-8')
    
    # 使用zlib进行压缩
    compressed_data = zlib.compress(data)
    
    # 解压缩,先确保数据被正确压缩,然后解压
    decompressed_data = zlib.decompress(compressed_data)
    
    # 将解压缩后的字节串转换回字符串
    decompressed_text = decompressed_data.decode('utf-8')
    
    # 打印原字符串和解压缩后的字符串进行对比
    print("Original Text:", text)
    print("Decompressed Text:", decompressed_text)
    
    # 可选:打印压缩前后数据的长度比较
    print("Original Size:", len(data), "bytes")
    print("Compressed Size:", len(compressed_data), "bytes")
    

    在这里插入图片描述
    很简单转成字节串就行了。大家看压缩前后对比,内容不变,但是数据长度变了。这是正常现象,因为原本的字符串本身长度就不长,转个压缩对象反而增加了对象信息之类的开销。当你压缩的内容越长,受益越大。

gzip

gzip模块提供了对gzip格式压缩文件的支持,gzip是一种流行的文件压缩格式,广泛应用于文件传输和存储,特别是在Unix/Linux系统中。gzip格式基于DEFLATE压缩算法,该算法结合了LZ77压缩方法和霍夫曼编码。

import gzip

with open('original_file.txt', 'rb') as f_in:
    with gzip.open('compressed_file.gz', 'wb') as f_out:
        f_out.writelines(f_in)

在这里插入图片描述
代码很简单。
第一行:打开一个文件,读取二进制流模式。之前讲的rbopen文件打开模式的参数不会忘了吧。
第二行:用gzip模块的open函数打开创建一个.gz文件,写入二进制流模式。
第三行:压缩文件读取原文件的二进制流。
这样就可以看到,文件已经被压缩好了,那么接下来我们解压一下。

with gzip.open('compressed_file.gz', 'rb') as f_in:
    with open('decompressed_file.txt', 'wb') as f_out:
        f_out.writelines(f_in)

在这里插入图片描述
代码一样的简单。
第一行:打开压缩文件,读取二进制流模式。
第二行:打开创建一个txt文件,写入二进制流模式。
第三行:二进制流的写入

最后我们看一下文件内容是不是一样

在这里插入图片描述

事实也证明了,我们使用gzip模块对文件进行压缩和解压,不会改变文件内容。

bz2

bz2模块提供了对BZ2文件格式的支持,这是一种使用Burrows-Wheeler变换和Huffman编码的高压缩比数据压缩算法。BZ2格式通常比传统的gzip格式提供更高的压缩比,尽管它的压缩和解压缩速度可能较慢。bz2模块主要用于需要高压缩率的场合,如存储大量数据或在网络上传输数据时减少带宽消耗。

import bz2

# 待压缩的字符串
text = '这是一个用于演示bz2模块的长文本字符串...'

# 转换为字节串
data = text.encode('utf-8')

# 压缩数据
compressed_data = bz2.compress(data)

# 解压缩数据
decompressed_data = bz2.decompress(compressed_data)

# 将解压缩后的字节串转换回字符串
decompressed_text = decompressed_data.decode('utf-8')

print('压缩前:', text)
print('压缩后:', compressed_data)
print('解压缩后:', decompressed_text)

在这里插入图片描述
看代码就知道,compresse函数仍然接受字节串类型的参数。

最后,我们操作一下文件试试。

# 写入BZ2文件
with bz2.BZ2File('example.bz2', 'wb') as f:
    f.write(text.encode('utf-8'))

# 读取BZ2文件
with bz2.BZ2File('example.bz2', 'rb') as f:
    content = f.read().decode('utf-8')

在这里插入图片描述

也能看到,我们将text的内容存到bz2文件后,读取出的内容与text的内容仍然是一致的。

lzma

lzma模块提供了对LZMA(Lempel-Ziv-Markov Chain Algorithm)压缩算法的支持,这是一种高效的压缩算法,以其高压缩比和相对较快的解压速度而著称。LZMA算法是7-Zip归档工具的核心部分,常用于创建.xz格式的压缩文件。

import lzma

# 写入.xz文件
with lzma.open('example.xz', 'w') as f:
    f.write(b'This is some example text to compress.')

# 读取.xz文件
with lzma.open('example.xz', 'r') as f:
    content = f.read()
print(content.decode('utf-8'))

在这里插入图片描述
这就是压缩和解压缩的例子。可以看到在文件流操作的时候,仍然使用了带b前缀的字符串(其实就是字节串)。这是不是说明和之前三个模块的是一样的,就没多写了。

结尾

以上就是关于数据压缩的四个模块的压缩和解压的功能。不难并且几个模块基础使用方式其实很相似。

当然这几个模块会有更高级特性和用法,这个依旧是用到的时候再仔细学习。基础的压缩和解压缩已经够用了。

作业

  1. 四个模块分别进行压缩和解压缩练习。

ps:今天工作的时候复制swagger链接,中文全部被转成了符号+数字的组合。复制出来以后用urllib.parse又转回去了。然后复制的链接瞬间好看多了!

Tessent ATPG进阶:解锁多种Fault Model的工程实践与选型指南 本文深入探讨Tessent ATPG中多种Fault Model的工程实践与选型策略,涵盖Stuck-at、Transition、Bridge等核心模型的应用场景与配置技巧。通过实际案例解析,展示如何组合不同Fault Model提升芯片测试覆盖率,特别针对汽车电子、超低功耗芯片等复杂场景提供专业解决方案。 阅读详情

相关推荐

unity制作交互视频/互动视频

unity制作交互视频/互动视频 思路 1.先让unity播放视频 2. 视频播放结束后,视频暂停,按钮出现 3.按钮跳转下一个视频 视频播放 先创建UI-Raw Iamge 在Raw Iamge 挂载组件 Video Player 接着挂载视频播放的脚本 using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; publi...

weixin_45588911的博客 8426

lzma和gzip压缩命令简介

LZMA (Lempel-Ziv-Markov chain-Algorithm) 基于著名的LZ77压缩算法改进的压缩/解压工具,特点:高压缩率,高解压速度,低内存消耗,lzma命令行工具使用方式和gzip,bzip2类似,对 已经熟悉gzip,bzip2这类工具的用户来说,上手并不难。 对比两大主流压缩工具:gzip,bzip2: 1,lzma和bzip2在速度上面远远输给gzip,但在压缩率方面,lzma算法占优势。 2,lzma拥有比gzip,bzip2更高的压缩比率,压缩后文件更小,纯文本文件...

fengruoying93的专栏 3171

从0死磕全栈之使用 VS Code 调试 Next.js 应用完整指南

调试目标推荐方式客户端组件VS Code + Chrome 调试器(pwa-chrome中间件(Middleware)同服务端方式静态生成(SSG)逻辑需在next build时调试,建议改用dynamic路由临时测试通过合理配置 VS Code 调试器,你可以像调试普通 Node.js 或前端项目一样,高效排查 Next.js 应用中的各类问题。🐞。

weixin_44058951的博客 1162

zlib库使用简单讲解


 
 
 
 
 
 
 1.zlib库简介   zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并...

Linux知识积累 4万+

5.44GHz超高精度!STM32G474的HRTIM时钟配置避坑指南

本文深入解析STM32G474内置高分辨率定时器的时钟配置要点,帮助工程师避开常见陷阱。文章详细阐述了从系统时钟到5.44GHz等效时基的路径,重点分析了预分频器乘法器、周期计算溢出、影子寄存器同步等关键配置,并结合实测波形对比,确保HRTIM在电机控制、数字电源等精密应用中发挥极限性能。

book8的博客 524

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 400

Python中的数据压缩与解压缩:深入了解zlib模块

模块还有一些其他的功能,包括支持增量压缩和解压缩,以及计算校验和。增量压缩和解压缩是指,我们可以将一个大的数据块分成多个小的数据块,然后分别进行压缩或解压缩。计算校验和是指,我们可以计算数据的CRC32校验和,以检查数据是否在传输过程中被修改。函数则执行相反的操作,接收一个包含压缩数据的字符串,并返回解压缩后的数据。在这个示例中,我们尝试对一段无效的压缩数据进行解压缩,结果引发了一个。函数接收一个字符串作为参数,并返回一个包含压缩数据的字符串。进行解压缩时,如果传入的数据不是有效的压缩数据,

小小张说故事的博客 1929

汽车电子RTOS--AUTOSAR OS

AUTOSAR OS(AUTomotive Open System ARchitecture Operating System)是AUTOSAR(汽车开放系统架构)标准中的一个重要组件,它是一个专门为汽车电子控制单元(ECU)设计的实时操作系统(RTOS)。AUTOSAR OS旨在提供一个标准化的软件平台,以促进不同供应商和汽车制造商之间的组件复用和协同开发,提高软件质量和降低成本。

MHD0815的博客 1798

Lzma(7-zip)和zlib

Lzma(7-zip) 使用: 在C目录中有算法文件,进入Util\LzmaLib目录,编译生成LIB库,导出了以下两函数,LzmaCompress 为压缩函数,LzmaUncompress 为解压缩函数。MY_STDAPI LzmaCompress(unsigned char *dest, size_t ...

aodiyu3146的博客 1002

老款 NUC 复活计划:装 Ubuntu 部署 OpenClaw 本地 AI

老款 NUC 变身本地 AI 服务器指南 本文详细介绍了如何将老旧华硕 NUC 设备改造为本地 AI 服务器。主要内容包括: 硬件评估:列出老款 NUC 的最低配置要求(i3 6代/8GB内存/256GB SSD),并提供兼容性检查命令和性能预期表 系统准备:指导备份数据、下载 Ubuntu 22.04 LTS 和制作启动盘的方法(Windows/Linux双平台) 安装流程:从 BIOS 设置到 Ubuntu 安装的完整步骤,包括推荐的分区方案 系统优化:禁用不必要的服务、内核参数调优、Swap 配置和

博客 7608

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

通过不断实践,熟悉软件的各项功能和操作技巧,工程师可更好地应对工业自动化控制中的各种挑战,开发出高效、稳定的控制程序。项目的基本组件是构成程序的核心元素,包括:程序块(主程序 OB1、子程序和中断程序)、数据块(给 V 存储器赋初值)、系统块(硬件组态和参数设置)、符号表(用符号代替存储器地址,使程序更易理解)以及状态图表(监视、修改和强制变量状态)。下载程序时,单击工具栏上的 “下载” 按钮,在弹出的下载对话框中选择要下载的块(程序块、数据块、系统块),单击 “下载” 即可。

电工 5574

python bz2模块详解 安装与导入 主要功能 使用示例 压缩数据 解压缩数据 读取BZ2文件 写入BZ2文件 错误处理 总结——《跟老吕学Python编程》

bz2模块为Python提供了对BZ2压缩算法的支持,使得开发者能够轻松地压缩和解压缩数据,以及处理BZ2格式的文件。通过该模块,你可以在保存数据或发送数据时减少空间占用,从而提高效率和减少存储或传输成本。记得在处理压缩和解压缩操作时始终注意异常处理,以确保程序的稳定性和可靠性。👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《跟老吕学Python编程》《Python游戏开发实战讲解》《Python Web开发实战》《Python网络爬虫实战》

Python老吕的博客 3178

Codex,Copilot 是什么

GitHub Copilot是什么 **GitHub Copilot** 是一款由 **GitHub** 和 **OpenAI** 合作开发的 **AI 代码辅助工具**,它基于 **OpenAI Codex 技术**,能够根据上下文自动生成代码建议,大幅提升编程效率

ZhangJiqun&191cm&85kg 6816

Linux下压缩工具和压缩算法的比较

压缩工具GZIP,BZIP2和LZMASH的比较: 1. 压缩效率(压缩后的文件越小,效率越高)GZIP 2. 压缩时间:GZIP 3. 解压缩时间:GZIP 参考文献: A Quick Benchmark: Gzip vs. Bzip2 vs. LZMA Archiver comparison 仅仅比较了压缩比和压缩时间,也证明了上述结论。 7-Zip使用LZMA

WaveRider2012的笔记 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Python压缩模块:bz2

`bz2`和`zlib`的功能是基本一致的,只是算法不同。bz2模块用到的压缩算法是`bzip2`算法,其核心是BW变换和MTF变换,当然最后少不了霍夫曼编码。

微小冷的学习笔记 3031

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

GZIP,XZ,LZO,BZIP2,LZMA压缩比较

1. 压缩效率:LZO <GZIP < BZIP2 < LZMA 2. 压缩时间:GZIP <LZO ~= BZIP2 << LZMA 3. 解压缩时间:LZO <GZIP < LZMA<< BZIP2 4.压缩需要的内存:GZIP < LZO < BZIP2 << LZMA 5.解压缩需要的内存:GZIP < LZO < BZIP2 << LZM ......

哈喽(o゚▽゚)o哈龍 3134

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

linux lzma 函数 调用,Lzma(7-zip)和zlib

Lzma(7-zip) 使用:在C目录中有算法文件,进入Util\LzmaLib目录,编译生成LIB库,导出了以下两函数,LzmaCompress 为压缩函数,LzmaUncompress 为解压缩函数。MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcL...

weixin_39622521的博客 630

Python 中的 zlib 模块:数据压缩与校验的强大工具

zlib 模块允许 Python 程序借助 zlib 库实现数据的压缩与解压缩操作。zlib 库的项目主页是,Python 的 zlib 模块推荐使用 1.1.4 及以上版本,早期版本存在兼容性或安全问题。该模块包含众多函数和类,涵盖压缩、解压缩、数据校验等功能,在数据处理的多个环节发挥着重要作用。无论是在网络数据传输中减少数据体积,还是在存储大量数据时节省磁盘空间,zlib 模块都能大显身手。例如在开发网络爬虫时,可对下载的网页数据进行压缩存储;在大数据处理场景中,对中间结果进行压缩以降低内存占用。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 2931

python3 import bz2 ModuleNotFoundError: No module named ‘_bz2‘

问题原因 这是因为在编译安装python3的时候没有按照bzip2-devel 包导致的。 解决办法 安装下这个包,然后重新编译安装一下python3就OK了。 sudo yum install bzip2-devel cd /usr/local/python3/Python-3.8.10 ./configure make make install ...

卢说 1355

python3 安装 bz2包

bz2 安装

sms鱼的博客 4415

Python实现压缩功能:LZ77编码和lzma模块

Python标准库总共提供了三种压缩算法,分别是`zlib`, `bz2`以及`lzma`,并且位这三个模块提供了高度相似的API,考虑到`zlib`中已经对很多定义做了详尽的解读,本文主要介绍一下`lzma`的核心编码方案,然后对常用的函数做一个示例。

微小冷的学习笔记 2826

压缩测试:LZMA vs ZLIB

转载http://blog.domlib.com/articles/388.htmlFlash Player11.4之后提供了LZMA的压缩支持,网上一直说这种压缩格式压缩率比ZLIB高很多,解压快很多。我感觉好像不太科学,还是自己测试下比较靠谱。测试的时候同时加上了天地会上给的as版LZMA解压类(可以用于低版本的FP)。?123456789101112131415161718192021222...

chqj_163的专栏 1524

iOS/MAC 数据压缩与解压缩及常用算法 LZMA、ZLIB

苹果提供的常用的数据压缩算法LZMA、ZLIB、LZ4等; 这三种算法也是苹果建议的,可跨平台使用; 定义如下: /* Commonly-available encoders */ COMPRESSION_LZ4 = 0x100, // available starting OS X 10.11, iOS 9.0 COMPRESSION_Z...

weixin_33785108的博客 930

bz2 — bzip2 压缩

bz2 模块是 bzip2 库的接口,用于压缩数据以进行存储或传输。

Bruce小鬼 2056

【Linux笔记】压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

在Linux系统中,有多种方式可以用于压缩和解压文件。

AliceNo的博客 1万+

Python 常用压缩库(zlib, bz2, gzip)以及压缩格式特点

压缩库 Python 常用的三个用于数据压缩/解压缩的库是: zlib, bz2, gzip. gzip:gzip压缩算法 zlib:对gzip所用算法的一个改进,去除部分冗余的信息,来提高对缓冲区数据的压缩速度。但核心算法和gzip是相同的。 bz2:wiki:Bzip2 uses several layers of compression techniques stacked on top o...

KarlSzp 4248
上一篇: Python学习笔记23:进阶篇(十二)常见标准库使用之日期时间功能datetime模块的学习使用
下一篇: Python学习笔记25:进阶篇(十四)常见标准库使用之性能测试timeit模块学习使用
明月望秋思
博客等级 码龄6年 1931粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值