Python Bz2模块
从计算机科学或工程角度来看,计算机可理解的语言与我们日常生活中使用的语言(如英语,中文,法语,印地语等)完全不同。那么问题来了,计算机如何理解并以我们输入命令的语言呈现输出。虽然这似乎是一个非常复杂的过程,但实际上,理解和学习起来并不那么复杂。我们在计算机或其他电子设备中以任何语言提供的输入命令都会被转换为计算机可读的形式(机器语言),然后计算机根据转换后的机器语言执行操作。之后,计算机也会以机器语言的形式产生结果,最后,该结果再次转换为人类可读的形式,并作为操作的输出呈现给我们。除了根据给定的输入命令期望计算机执行的操作,将命令转换为机器语言并再次转换为人类可读形式的过程同时进行。在执行流程中,还需要对命令进行其他转换。
命令的转换也可以通过压缩和解压缩命令或文件来解释。当我们将数据从一个设备传输到另一个设备时,它会被压缩为计算机可读的形式,然后再次解压缩为人类可读的形式。这种压缩和解压缩的过程与命令和文件的转换过程非常相似,因此这些术语也可以互换使用。在我们的日常生活中,有许多情况下我们在不知情的情况下进行文件或文本的压缩和解压缩。例如,当我们向某人发送消息或文本时,它首先被压缩,然后在接收方接收后,该消息会再次解压缩,这就是两个设备之间的通信方式。在编程和开发的世界中,许多编程语言提供了进行文本或文件压缩和解压缩操作的选项。仅就Python而言,它也有多个库,可以用来压缩和解压缩给定的文本或文件。我们可以在Python程序中使用这些库或包的函数来压缩或解压缩给定的文本或文件。Python的bz2模块就是这样一个模块,我们可以在Python程序中使用它来压缩或解压缩给定的文本或文件。因此,我们将在本教程中学习Python的bz2模块,并学习如何使用该模块的函数对给定的文本和文件执行压缩和解压缩操作。
Python中Bz2模块简介
Python的bz2模块专门用于在程序中执行解压缩和压缩给定文本和文件的操作。它是Python模块中的其中一个,我们可以使用它在给定的文本和文件上非常顺利地进行压缩和解压缩操作。Python的bz2模块基于bzip2压缩算法,这是一种专门用于执行文本和文件的压缩和解压缩操作的算法。我们可以根据这个bzip2压缩算法直接在程序中提供文本或文本文件来执行压缩或解压缩操作。由于在Python中我们没有char数据类型,因此bz2模块用于对输入字符串或在程序中打开的文本文件执行压缩或解压缩操作。这个模块带有很多函数,用于执行与字符串和文本文件的压缩和解压缩相关的多个操作。在本教程的后面部分,我们将学习关于bz2模块的所有这些函数,并通过在示例Python程序中使用它们来理解它们的实现。但是在使用这些函数之前,我们将学习它们的工作原理和如何使用它们。
Python中的Bz2模块:安装
bz2模块是一个内置模块,这意味着这个模块在Python安装过程中预先安装。因此,如果我们使用最新版本的Python,就不需要执行任何安装过程来安装这个bz2模块,我们可以直接开始使用这个模块。当我们开始使用这个模块的函数并执行它们时,我们甚至可以验证这个模块在我们的系统中是否存在。 我们只需要使用下面的导入语句来在给定的Python程序中使用bz2模块的函数:
# Importing the in-built bz2 compression module
import bz2
因此,我们可以直接进行这个模块的实现部分,并了解该模块的函数的实现。
Python中的Bz2模块:重要函数
在我们继续处理该模块的实现部分之前,我们将学习一些该模块的重要函数。学习这些函数很重要,因为使用这些函数,我们将能够在Python程序中执行压缩和解压缩,以及打开、关闭和保存压缩或解压缩的文本文件。
以下是bz2模块中一些重要函数及其简要说明:
(1)open(): bz2模块的open函数用于在Python程序中打开文本文件(包括压缩的文本文件),以便对其进行进一步的压缩操作。以下是使用该模块的open()函数的语法:
>> bz2.open(nameOfFile, mode = 'rb', compresslevel = 9, encoding = None, errors = None, newline = None)
如我们在上面给出的语法中所看到的,bz2模块的open()函数接受多个参数,但并不是所有这些参数都是必需的参数。除了文件名之外,其他参数要么是可选的,要么在打开压缩文本文件时应该使用。
以下是open()函数中提供的参数的描述:
(i) nameOfFile: 它是我们要在程序中打开的文件的名称(如果存在于程序的相同目录中),如果文件不存在于相同目录中,则必须提供文件的完整目录路径。
(ii) 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格式文件的语法:
>> bz2.BZ2File(nameOfFile, mode = 'w', *, compresslevel = 1)
正如我们所见,此函数中提供的参数与我们在open()函数中需要提供的参数相同。但是BZ2FILE()函数只接受三个可选参数。
(3) BZ2Compressor(): bz2模块的BZ2Compressor()函数用于在程序中创建一个压缩对象,我们可以将打开的文件进行压缩。以下是使用bz2模块的BZ2Compressor()函数创建压缩对象的语法:
>> BZ2Compressor(compresslevel = 1)
正如我们所看到的,该函数只接受compresslevel作为它的参数,并且这个参数是该函数的必需参数。我们必须根据打开的文件将其压缩级别提供给compresslevel。
(4) peek(): bz2模块的peek函数用于从程序中打开的文本文件返回缓冲的数据。这不是bz2模块中常用的函数,但当我们对文件进行高级压缩和解压缩时必须使用这个peek()函数。
(5) compress(): bz2模块的compress()函数用于压缩作为程序输入源的字符串和文本文件。我们可以将文件名、给定的输入字符串或定义为保存这些数据的变量作为函数的参数。以下是在程序中使用compress()函数进行字符串或文本文件压缩的语法:
>> bz2.compress('File or String')
如我们所见,这个compress()函数只接受一个参数,并且压缩给定的文件或字符串,该文件或字符串作为输入参数提供。
(6) flush(): 当我们使用compress()函数和压缩对象来压缩文件时,我们必须使用这个函数。bz2模块的flush()函数用于在成功压缩文本文件后保存和关闭压缩过程。当我们使用这个函数时,程序中不必再使用退出压缩对象。该函数返回服务器内部缓冲区中返回的文件的压缩数据。
(7) decompress(): bz2模块的decompress()函数用于解压缩作为程序中输入源提供的压缩字符串和文本文件。我们可以将压缩文件名、给定的输入字符串或定义用于保存此数据的变量名作为该函数的参数。以下是在程序中使用decompress()函数进行解压缩压缩字符串或文本文件的语法:
>> bz2.decompress('File or String')
正如我们所见,这个函数只接受一个参数,并解压缩提供的压缩文件或字符串作为输入参数。
这是bz2模块的重要函数的完整描述,我们可以在Python程序中使用这些函数来压缩或解压文本文件或输入字符串。通过这些函数的帮助,我们可以非常容易地对任何输入字符串或文本文件进行压缩或解压缩操作。
Python中的Bz2模块:实现
我们已经学习了bz2模块的所有重要函数的基本细节,但我们可以理解它们如何工作的唯一方法就是在Python程序中使用它们。当我们在示例程序中使用这些函数时,我们将更好地理解和学习这些函数在输入文本文件或字符串上的实际工作方式。但在本教程中,我们将仅使用用户提供的输入字符串或程序中给出的字符串,并因此在此部分中使用bz2模块的compress和decompress函数。其他函数的工作原理也非常相似,如果我们理解这两个函数的工作原理,那么我们使用该模块的其他函数将非常容易。在本部分中,我们将查看一些示例,其中要么接受用户输入的字符串并对其进行压缩,要么提供输入的压缩字符串并对其进行解压缩。请参考以下示例程序,以了解bz2模块的compress()和decompress()函数的工作原理:
示例1:压缩程序中提供的输入字符串
在这个示例程序中,我们将在程序中提供一个输入字符串,然后对其进行压缩。请查看以下Python程序,其中我们在程序中给出了一个输入字符串,并在程序中使用compress()函数对其进行了压缩:
# Importing the in-built bz2 module
import bz2
# Providing a string as an input in the program
inStr = b'This is a string provided by the user of the JavaTpoint to compress!'
# Compressing the string given as an input
compRes = bz2.compress(inStr)
# Printing the result of the compression of input string
print('The compressed form of the input string provided in the program is: ')
print(compRes)
输出:
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'
正如我们所见,压缩后的输入字符串以HTML格式打印在输出中,这是通过使用bz2模块的compress()函数在程序中对任何输入字符串或文本文件进行压缩的方式。
示例2:解压程序中给定的压缩字符串
在下面的示例程序中,我们将使用decompress()函数解压一个给定的压缩字符串,并将解压后的字符串打印在输出中。请看下面的Python程序,以了解bz2模块的decompress()函数在解压文本文件或字符串时的工作方式:
# Importing the in-built bz2 module
import bz2
# Taking a string as an input in the program
inStr = b'Welcome to JavaTpoint! This is an input string which will first compressed and then decompressed in the program'
# Compressing the string given as an input
compRes = bz2.compress(inStr)
# Now decompressing the compressed input string
deStr = bz2.decompress(compRes)
# Printing the result of the decompression in the output
print('The decompressed form of the compressed input string provided in the program is: ')
print(deStr)
输出:
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:在程序中同时压缩或解压缩输入字符串
# Importing the in-built bz2 module
import bz2
# Taking a string as an input from the user
inStr = 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'
# Compressing the string given as an input
compRes = bz2.compress(inStr)
# Printing the result of the compression of the file
print('The compressed form of the input string provided in the program is: ')
print(compRes)
# Now decompressing the compressed input string
deStr = bz2.decompress(compRes)
# Printing the result of the decompression in the output
print('The decompressed form of the compressed input string provided in the program is: ')
print(deStr)
输出:
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'