Python ZipFile是一类用于读写ZIP文件的zipfile模块。ZIP是支持无损数据压缩的档案文件格式。 通过无损压缩算法,原始数据可以完全从压缩后的数据中重构出来。
一个ZIP文件是一个包含一个或多个压缩文件的单一文件,提供了一种使大文件变小并将相关文件放在一起的简单方法。
Python解压缩
要在Python中解压缩一个文件,使用ZipFile.extractall()方法。extractall() 方法将 路径、成员、pwd 作为参数,并提取所有内容。
为了使用Python处理Zip文件,我们将使用一个内置的Python模块,叫做 zipfile 。在Python的zipfile模块中,ZipFile类提供了一个成员函数来提取所有的ZIP档案内容。
ZipFile.extractall(path=None, members=None, pwd=None)
它接受以下参数:
path:需要提取ZIP文件的位置;如果没有提供,它将提取当前目录中的内容。
members:要提取的文件的列表。如果没有提供这个参数,它将提取压缩文件中的所有文件。
pwd:如果压缩文件是加密的,在这个参数中传递密码,默认为None。
Python unzip的例子
在我当前的工作目录中,有一个名为Mail3.zip 的压缩文件, 我想用ZipFile.extractall()方法来解压它。
请看下面的代码:
# app.py
from zipfile import ZipFile
with ZipFile('Mail3.zip', 'r') as zipObj:
# Extract all the contents of zip file in current directory
zipObj.extractall()
python3 app.py
它将提取同一目录下你的编程app.py文件中的文件。
它将提取当前目录下的压缩包中的所有文件。如果同名的文件在提取位置已经存在,它们将被覆盖。
我们使用Python with语句来打开文件。"Python with "确保在程序执行离开with语句的上下文后,打开的文件描述符会自动关闭。
从一个压缩文件中提取所有文件到不同的目录
我们可以从 zip 文件中提取所有的文件到不同的目录,要做到这一点,我们需要在 extractall() 中传递目标位置作为一个参数。路径可以是相对的,也可以是绝对的。
请看下面的代码:
# app.py
from zipfile import ZipFile
with ZipFile('Mail3.zip', 'r') as zipObj:
# Extract all the contents of zip file in different directory
zipObj.extractall('temp')
print('File is unzipped in temp folder')
一个ZipFile对象是通过调用ZipFile构造函数制作的,它接受Zip文件名和模式参数。接下来,我们以READ模式创建ZipFile对象,并将其命名为zipObj。
在输出中。如果临时文件夹不存在,它将在当前目录下创建该文件夹,并解压Mail3.zip文件的所有内容。
python3 app.py
File is unzipped in temp folder
根据条件从一个大的压缩文件中提取文件
我们有一个巨大的压缩文件,我们需要从存档的数千个文件中提取几个文件。从一个大的压缩文件中解压缩所有的文件可能需要几分钟。但是如果你只对归档文件中的几个文件感兴趣,那么我们可以不解压缩整个文件,而是从压缩文件中提取单个文件。
Python ZipFile类提供了一个成员函数,可以从ZIP文件中提取一个单一的文件。
ZipFile.extract(member, path=None, pwd=None)
请看下面的代码:
# app.py
from zipfile import ZipFile
with ZipFile('Mail3.zip', 'r') as zipObject:
listOfFileNames = zipObject.namelist()
for fileName in listOfFileNames:
if fileName.endswith('.py'):
# Extract a single file from zip
zipObject.extract(fileName, 'temp_py')
print('All the python files are extracted')
如果文件名的扩展名是.py,就会在temp_py 文件夹内提取它们。否则,它不会提取文件。
在Python中解压缩文件是非常容易的,因为Python提供了zipfile 模块。
zipfile 模块具有根据条件解压单个或多个文件的所有功能。
本教程到此结束。