Python Bz2 模块

2024 年 8 月 29 日 | 阅读 11 分钟

在计算机科学或工程术语中,计算机可理解的语言与我们日常生活中使用的语言(如英语、中文、法语、印地语等)完全不同。那么问题来了,计算机如何理解并以我们输入命令的语言呈现输出。虽然这看起来是一个非常复杂的过程,但实际上,它并不难理解和学习。我们以任何语言提供给计算机或其他电子设备的输入命令都会被转换成计算机可读的形式(机器语言),然后计算机根据转换后的机器语言命令执行操作。之后,结果也由计算机以机器语言生成,最后,这个结果再次转换成人类可读的形式,并作为操作的输出呈现给我们。除了我们期望计算机根据给定输入命令执行的操作外,命令转换为机器语言和再次转换为人类可读形式的过程同时发生。还有许多其他过程需要转换命令才能执行。

命令的这种转换也可以通过命令或文件的压缩和解压缩来解释。当我们从一个设备传输数据到另一个设备时,它会被压缩成计算机可读的形式,然后再次解压缩成人类可读的形式。这种压缩和解压缩过程与命令和文件的转换过程非常相似,这就是为什么这些术语也可以互换使用。在我们的日常生活中,我们经常在不知不觉中执行文件的压缩和解压缩。例如,当我们向某人发送消息或文本时,它首先被压缩,在接收者收到后,此消息再次解压缩,这就是两个设备之间通信的方式。在编程和开发的世界中,许多编程语言为我们提供了执行文本或文件压缩和解压缩操作的选项。仅谈论 Python,它也有多个库可以用于压缩和解压缩给定的文本或文件。我们可以在 Python 程序中使用这些库或包的函数来压缩或解压缩给定的文本或文件。Python 的 bz2 模块就是这样一个模块,我们可以在 Python 程序中使用它来压缩或解压缩给定的文本或文件。因此,在本教程中,我们将学习 Python 的 bz2 模块,并学习如何使用此模块的函数对给定的文本和文件执行压缩和解压缩操作。

Python Bz2 模块简介

Python 的 bz2 模块专门用于在程序中对给定文本和文件执行解压缩和压缩操作。它是我们可以非常流畅地对给定文本和文件执行压缩和解压缩操作的 Python 模块之一。Python 的 bz2 模块基于 bzip2 压缩算法,该算法专门设计用于执行文本和文件的压缩和解压缩操作。我们可以直接在程序中提供文本或文本文件以根据此 bzip2 压缩算法执行压缩或解压缩操作。由于 Python 中没有字符数据类型;因此,bz2 模块设计用于对程序中打开的输入字符串或文本文件执行压缩或解压缩操作。此模块附带许多函数,用于执行与字符串和文本文件的压缩和解压缩相关的多项操作。我们将在本教程的后续部分学习 bz2 模块的所有这些函数,并通过在示例 Python 程序中使用它们来理解它们的实现。但在示例程序中使用这些函数之前,我们将学习它们的工作原理以及如何使用它们。

Python 中的 Bz2 模块:安装

bz2 模块是一个内置模块,这意味着该模块随 Python 的安装预装。因此,如果我们使用的是最新版本的 Python,我们无需执行任何安装过程来安装此 bz2 模块,我们可以直接开始使用此模块。我们甚至可以在开始使用此模块的函数并执行它们时验证此模块是否存在于我们的系统中。我们只需使用以下 import 语句即可在给定的 Python 程序中使用 bz2 模块的函数:

因此,我们可以直接进行此模块的实现部分,并理解此模块函数的实现。

Python 中的 Bz2 模块:重要函数

在我们继续进行此模块的实现部分之前,我们将学习此模块的一些重要函数。学习这些函数很重要,因为使用这些函数;我们将能够执行压缩和解压缩以及在 Python 程序中打开、关闭和保存压缩或解压缩的文本文件。

以下是一些 bz2 模块的重要函数及其简要说明

(1) open(): bz2 模块的 open 函数用于在 Python 程序中打开一个文本文件(也包括压缩文本文件),以便在其上执行进一步的压缩操作。以下是使用此模块的 open() 函数的语法

正如我们在上面给出的语法中看到的,bz2 模块的 open() 函数接受多个参数,但所有这些参数都不是强制参数。除了文件名之外,其他参数是可选的,或者应该在打开压缩文本文件时使用。

以下是此 open() 函数中提供的参数的描述

(i) nameOfFile: 它是我们要在程序中打开的文件名(如果存在于程序所在的同一目录中),如果文件不存在于同一目录中,我们必须提供文件的完整目录路径。

(ii) mode: mode 用于定义我们在程序中打开的文件的模式,它对于普通文本文件和压缩文本文件是不同的。对于文本模式,有 'at'、'xt'、'wt' 和 'rt';而对于二进制模式,有 'ab'、'a'、'xb'、'x'、'wb'、'w'、'rb' 和 'r' 模式选项。这些不同的模式选项用于定义我们可以对打开的文件执行的不同类型的操作。如果我们在函数中没有使用文件名定义任何模式参数,它将默认使用 'rb'。

(iii) compresslevel: 此参数是可选参数,仅在通过 open() 函数打开压缩文件时使用。我们必须以整数形式定义压缩文件的压缩级别,范围从 1 到 9,具体取决于文件的压缩级别。

(iv) encoding: 如果我们打开的文件使用了任何编码格式,我们必须提供该信息。我们不必强制在 open() 函数中提供此参数。

(v) errors: 这也是 open() 函数的可选参数,用于定义文件中是否存在任何错误。

(vi) newline: 这是 open() 函数的可选参数,用于定义打开的文件中是否存在任何换行符。

这是可以在 open() 函数中提供的所有参数的描述。

(2) BZ2File(): bz2 模块的 BZ2File() 函数与 open() 函数类似,但它仅用于以二进制格式打开 bz2 压缩文件。以下是使用 bz2 模块的 BZ2File() 函数打开压缩 bz2 格式文件的语法

正如我们所见,此函数中提供的参数与我们在 open() 函数中必须提供的参数相同。但 BZ2FILE() 函数只接受三个可选参数。

(3) BZ2Compressor(): bz2 模块的 BZ2Compressor() 函数用于在程序中创建一个压缩对象,我们可以使用该对象来压缩程序中打开的文件。以下是使用 bz2 模块的 BZ2Compressor() 函数创建压缩对象的语法

如我们所见,此函数只接受 compresslevel 作为参数,并且此参数是函数的强制参数。我们必须根据在程序中压缩打开文件的压缩级别来提供 compresslevel。

(4) peek(): bz2 模块的 peek 函数用于返回我们在程序中打开的文本文件中的缓冲数据。这不是 bz2 模块的常用函数,但当我们在文件上执行高级压缩和解压缩时,我们必须使用此 peek() 函数。

(5) compress(): bz2 模块的 compress() 函数用于压缩程序中作为输入源提供的字符串和文本文件。我们可以提供文件名、给定输入字符串或用于保存此数据的变量作为函数的参数。以下是程序中使用 compress() 函数压缩字符串或文本文件的语法

如我们所见,此 compress() 函数只接受一个参数,并压缩作为输入参数提供的文件或字符串。

(6) flush(): 当我们使用 compress() 函数和压缩对象压缩文件时,我们必须使用此函数。bz2 模块的 flush() 函数用于在文本文件成功压缩后保存和关闭压缩过程。当我们使用此函数时,我们不需要在程序中在此函数之后使用退出压缩对象。此函数返回服务器内部缓冲区中返回的文件的压缩数据。

(7) decompress(): bz2 模块的 decompress() 函数用于解压缩程序中作为输入源提供的压缩字符串和文本文件。我们可以提供压缩文件名、给定输入字符串或用于保存此数据的变量名作为函数的参数。以下是程序中使用 decompress() 函数解压缩压缩字符串或文本文件的语法

如我们所见,此函数只接受一个参数,并解压缩作为输入参数提供的压缩文件或字符串。

这是 bz2 模块重要函数的完整描述,我们可以在 Python 程序中使用它们来压缩或解压缩文本文件或输入字符串。借助这些函数,我们可以非常轻松地对任何输入字符串或文本文件执行压缩或解压缩操作。

Python 中的 Bz2 模块:实现

我们已经学习了 bz2 模块所有重要函数的基本细节,但唯一能理解它们如何工作的方法是在 Python 程序中使用它们。当我们在示例程序中使用这些函数时,我们将更好地理解和学习这些函数如何在输入文本文件或字符串上实际工作。但在此教程中,我们将只处理用户提供或程序中给定的输入字符串,因此,我们将在此部分使用 bz2 模块的 compress 和 decompress 函数。其他函数的工作方式也非常相似,如果我们理解这两个函数的工作方式,我们就可以非常容易地使用此模块的其他函数。在此部分,我们将查看一些示例,其中我们要么获取用户输入字符串并对其进行压缩,要么提供输入压缩字符串并对其进行解压缩。请看以下示例程序,以理解 bz2 模块的 compress() 和 decompress() 函数的工作原理

示例 1:压缩程序中提供的输入字符串

在此示例程序中,我们将在程序中提供一个输入字符串,然后对其进行压缩。请看以下 Python 程序,我们在其中给出了一个输入字符串,并使用 compress() 函数在程序中对其进行了压缩

输出

The compressed form of the input string provided in the program is: 
b'BZh91AY&SY\xd75MP\x00\x00\x07\x17\x80`\x00\x00\x10\x04\x00?\xe3\xdf  \x00H\x88\x1a\x8f&\xa7\x93A\xa4)\xea\r\x01\xa6\x80\xd0\xb4oM.[\xbc?n\x8d\xda\xb4\xc3\xcd\xec\x1c\xf0\xf8P\xcf\xc2(tT\x02\x18\xe1^\x05\nBl\xc2\xc4\x906\x02\xe6\xbf\x17rE8P\x90\xd75MP'

正如我们所看到的,输入字符串的压缩形式作为程序结果输出。这就是我们如何使用 bz2 模块的 compress() 函数在程序中压缩任何输入字符串或文本文件。

示例 2:解压缩程序中给定的压缩字符串

在以下示例程序中,我们将使用 decompress() 函数解压缩输入的给定压缩字符串,然后,我们将在输出中打印解压缩的字符串。请看以下 Python 程序,以理解 bz2 模块的 decompress() 函数如何解压缩文本文件或字符串

输出

The decompressed form of the compressed input string provided in the program is: 
b'Welcome to JavaTpoint! This is an input string which will first compressed and then decompressed in the program'

正如我们所看到的,我们已使用 compress() 函数在程序中提供了一个压缩的输入字符串,然后我们在程序中打印了该压缩字符串的解压缩形式。我们可以看到,压缩输入字符串的解压缩形式已成功作为程序结果输出。这就是我们如何使用 bz2 模块的 decompress() 函数在程序中解压缩任何输入的压缩字符串或文本文件。

示例 3:在程序中同时压缩或解压缩输入字符串

输出

The compressed form of the input string provided in the program is: 
b"BZh91AY&SY~\x8f\xa2\x97\x00\x00\x10\x1f\x80`\x00\x10\x00\x00\x10\x04\x80?o\xdf\xb0 \x00\x89\rL\x93C\xd2i\xa1\xb5\x07\xa4\xf4\x1a\t\xea\xa7\xa7\xa9\x1e\nhz'\xa5\x8e\xebF\xaem\x94B\x13i\xfcl\xa7\x04\xf1&\x1f\x85*9\xc8\xa1\xee\xcf\xde\xb2\x17*\xf4\x03-\xb6\x19\x8dj\x06\x0c\x98\x89\xc5@V\xb8q\x93L\xff\x9e\xca\x03\xdd\x15\xdcj\x12\xd2\xa7\x08@\xc4\xa9\xcbq\xb8\xd6\xe2\xd5\xf4\x0b=\xe60\x1c=\xc95\xf2\x96,\x91\xef\xa7y)\x89\x92\xe0]\xc9\x14\xe1BA\xfa>\x8a\\"
The decompressed form of the compressed input string provided in the program is: 
b'Welcome to JavaTpoint! We hope that you are now able to understand and work with the functions of the bz2 module to carry out compression and decompression operations'