Python zlib库,什么是 Python 中的 zlib?

zlib 是一个支持 zlib C 库的 Python 库,zlib C 库是对缩减无损压缩算法的更高级概括。zlib库用于无损压缩,这意味着压缩和解压缩之间没有数据丢失)。

它还提供了跨不同平台的可移植性优势,并且不会扩展数据。

这个库在安全性方面起着非常重要的作用。许多应用需要压缩和解压缩任意数据,如字符串、文件或结构化内存内容。

这个库非常适合 gzip 文件格式/工具,是 UNIX 系统上最流行和最有用的压缩应用。

压缩()方法

zlib库方便我们使用compression()方法,用来压缩一个数据串。下面是函数的语法。


compress(data, level=-1)

参数-

  • data 参数指定要压缩的字节,级别表示介于-1 到 9 之间的整数值。level 参数用于定义压缩级别。9 级表示最慢;但是,它带来了最高的压缩级别。值-1 是 6 级默认值。0 级不会产生压缩。

让我们理解下面的例子。

示例-


import zlib
import binascii

value = 'Welcome to JavaTpoint'

compressed_data = zlib.compress(value, 2)

print('Original data: ' +  value)
print('Compressed data: ' + binascii.hexlify(compressed_data))

输出:

Original data: Welcome to JavaTpoint
Compressed data: 785ef348cdc9c95728cf2fca49010018ab043d

如果我们将值 2 改为 0,那么结果如下。


Original data: Welcome to JavaTpoint
Compressed data: 785ef348cdc9c95728cf2fca49010018ab043d

压缩大数据流

zlib库提供了 comressobj() 功能来管理大数据流。此方法返回压缩对象。语法如下。

语法-


compressobj(level=-1, method=DEFLATED, wbits=15, memLevel=8, strategy=Z_DEFAULT_STRATEGY[, zdict])

参数-

  • 上面的方法接受 wbits 作为处理窗口大小的参数,输出中包含头和尾。以下是的可能值

| 价值 | 窗口大小对数 | 输出 |
| +9 至+15 | 基数 2 | 它包括 zlib 头部和尾部。 |
| +9 至-15 | 表示 wbit 的绝对值 | 不包括标题和尾部。 |
| +25 至+31 | 该值的低 4 位。 | 它包括报头和尾部校验和。 |

  • 方法参数定义了压缩中使用的算法。放气是默认的或者我们可以说当前可能的算法。
  • 策略参数定义了压缩调优。建议现在只使用其默认值。

让我们理解下面的例子

示例-


import zlib
import binascii

data = 'Welcome to JavaTpoint'

compress = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, zlib.DEFLATED, -15)
compressed_data = compress.compress(data)
compressed_data += compress.flush()

print('Original: ' + data)
print('Compressed data: ' + binascii.hexlify(compressed_data))

输出:

Original: Hello world
Compressed data: f348cdc9c95728cf2fca490100

解释-

我们取了一个简单的字符串值,它不是一个大数据流,它的目的是显示 compressobj() 函数的工作情况。字符串“欢迎使用 JavaTpoint”已被压缩。通常,当数据流太大或不适合内存时,使用这种方法。这种方法在一个更大的应用中起着至关重要的作用,在这个应用中,我们可以配置压缩,并且可以用来连续压缩部分数据。

它在需要压缩的地方起着重要的作用。借助compression . compression(data)方法,我们可以压缩和刷新数据块,而无需在内存中累积全部数据。

压缩文件

我们将使用压缩()方法来压缩文件。语法与前面的例子相似。

在下面的例子中,我们将压缩 PNG 图像“mountain.png”。

让我们理解下面的例子。

示例-


import zlib

original_data = open(r'C:\Users\DEVANSH SHARMA\Pictures\Saved Pictures\mountain.png', 'rb').read()
compressed_data = zlib.compress(original_data, zlib.Z_BEST_COMPRESSION)

compress_ratio = (float(len(original_data)) - float(len(compressed_data))) / float(len(original_data))
print('Compressed: %d%%' % (100.0 * compress_ratio))

输出:

Compressed: 10%

在上面的例子中,我们使用了 Z_BEST_COMPRESSION,这是该算法必须提供的最佳压缩级别。在下一行中,我们根据压缩数据长度与原始数据的比率来计算压缩级别。文件被压缩了 13%,这就是如何压缩 ASCII 字符串或二进制图像数据。

将压缩数据保存到文件

我们还可以将压缩的数据保存在一个文件中以供进一步使用。在下面的例子中,我们将一些压缩文本显示到一个文件中。

示例-


import zlib

my_data = 'Welcome to JavaTpoint'

compressed_data = zlib.compress(my_data, 2)

f = open('outfile.txt', 'w')
f.write(compressed_data)
f.close()

当我们运行上述程序时,它会压缩给定的字符串,并将压缩后的数据保存到一个名为“output.txt”的文件中。

解压

解压缩也是应用的一个重要方面。zlib库提供了解压()方法。下面是它的语法。

语法:


decompress(data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)

参数-

  • 数据参数是字节格式的值。
  • wbits 参数用于管理历史缓冲区的大小。可能的缓冲值如下。

| 价值 | 窗口大小对数 | 投入 |
| +8 至+15 | 基数 2 | 它包括 zlib 头部和尾部 |
| -8 到-15 岁 | 它代表了 wbits 的绝对优势 | 它包括没有头和尾的原始流 |
| +24 至+31 = 16 + (8 至 15) | 它代表该值的低 4 位 | 它包括 gzip 标题和尾部 |
| +40 至+47 = 32 + (8 至 15) | 它代表该值的低 4 位 | zlib 或 gzip 格式 |

  • bufsize 参数指示缓冲区大小。这个论点最好的一点是,它不需要精确;当需要额外的缓冲区时,它的值会自动增加。

让我们理解下面的例子。

示例-


import zlib
data = 'Welcome to JavaTpoint'

compressed_data = zlib.compress(data, 2)
decompressed_data = zlib.decompress(compressed_data)

print('Decompressed data: ' + decompressed_data)

输出:

Welcome to JavaTpoint

解压缩大数据流

在解压缩大数据流时,由于数据的大小或来源,我们可能会面临内存管理问题。我们有可能无法将所有可用的内存用于该特定任务。因此,解压缩 obj() 允许我们将一个大的流分成多个块,这些块可以单独解压缩。

语法如下。

语法-


decompressobj(wbits=15[, zdict])

上述方法返回解压对象,用于解压特定数据。

让我们理解下面的例子。

示例-


import zlib

data = 'Welcome to JavaTpoint'

compress = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, zlib.DEFLATED, +15)
compressed_data = compress.compress(data)
compressed_data += compress.flush()

print('Data before Decompress: ' + data)
print('Data After Decompress: ' + compressed_data)

f = open('compressed.datd', 'w')
f.write(compressed_data)
f.close()

CHUNKSIZE = 1024

data2 = zlib.decompressobj()
my_file = open('compressed.dat', 'rb')            
buffer_value = my_file.read(CHUNKSIZE)

# Decompress stream chunks
while buffer_value:
    decompressed_data = data2.decompress(buf)
    buf = my_file.read(CHUNKSIZE)

decompressed_data += data2.flush()

print('Decompressed data: ' + decompressed_data)

my_file.close()

输出:

Data Before Decompress: Welcome to JavaTpoint
Data After Decompress - #@$%%#@@#s
Decompressed Data: Welcome to JavaTpoint

从文件中解压缩数据

正如我们在前面的例子中所讨论的,我们可以轻松地解压缩文件中包含的数据。这个例子类似于前面的例子;我们从文件中获取数据,只是在这种情况下,我们将使用解压()方法。当数据小到可以很容易地放入内存时,这种方法很有用。

让我们理解下面的例子。

示例-


import zlib

compressed_data = open('hello.dat', 'rb').read()
decompressed_data = zlib.decompress(compressed_data)
print(decompressed_data)

解释-

我们已经阅读了包含“欢迎来到 JavaTpoint”的 hello.dat。但是,该文件包含一个小字符串,因此我们使用了解压缩()而不是解压缩 obj() 函数。

结论

当应用需要安全级别的压缩时,Python zlib库非常有用。它有一堆优秀的功能。我们已经讨论了 zlib库的一些重要概念,尽管有许多函数可用。压缩()和解压缩()方法用于小数据,而压缩 obj()和解压缩 obj()方法通过支持数据流的压缩/解压缩来提供更大的灵活性。


原创文章,作者:UBCDC,如若转载,请注明出处:https://www.506064.com/n/329700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UBCDCUBCDC
上一篇 2025-01-14 18:55
下一篇 2025-01-14 18:55

相关推荐

  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论