Python zipfile 模块



ZIP 是用于存档和压缩的最流行的文件格式之一。它自 MSDOS 和 PC 时代以来一直在使用,并被著名的 PKZIP 应用程序使用。

Python 的标准库为 zipfile 模块提供了带有类的类,这些类有助于创建、提取、读取和写入 ZIP 档案的工具。

ZipFile() 函数

此函数从 file 参数返回一个 ZipFile 对象,该参数可以是字符串或由内置 open() 函数创建的文件对象。该函数需要一个默认值为 'r' 的 mode 参数,尽管它可以分别采用 'w' 或 'a' 值来以读取、写入或附加模式打开存档。

默认情况下,存档是未压缩的。要指定要使用的压缩算法的类型,必须将其中一个常量分配给 compression 参数。

zipfile.ZIP_STORED

对于未压缩的存档成员。

zipfile.ZIP_DEFLATED

对于通常的 ZIP 压缩方法。这需要 zlib 模块。

zipfile.ZIP_BZIP2

对于 BZIP2 压缩方法。这需要 bz2 模块。

zipfile.ZIP_LZMA

对于 LZMA 压缩方法。这需要 lzma 模块。

ZipFile 对象使用以下方法 -

write() 方法

此方法将给定的文件添加到 ZipFile 对象。


import zipfile
newzip=zipfile.ZipFile('newzip.zip','w')
newzip.write('zen.txt')
newzip.close()

这将在当前目录中创建 newzip.zip 文件。可以通过在附加模式('a' 作为模式)中打开它来将其他文件添加到现有的存档中。


import zipfile
newzip=zipfile.ZipFile('newzip.zip','a')
newzip.write('json.txt')
newzip.close()

read() 方法

此方法从存档中的特定文件中读取数据。


import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
data = newzip.read('json.txt')
print (data)
newzip.close()

输出

b'["Rakesh", {"marks": [50, 60, 70]}]'

printdir() 方法

此方法列出给定存档中的所有文件。


import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
newzip.printdir()
newzip.close()

输出

File Name Modified Size
zen.txt 2024-08-30 21:55:48 132
json.txt 2024-08-03 22:01:56 35

extract() 方法

默认情况下,此方法将指定的文件从存档中提取到当前目录或作为第二个参数的目录。


import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
newzip.extract('json.txt', 'newdir')
newzip.close()

extractall() 方法

默认情况下,该方法将存档中的所有文件提取到当前目录。如果需要,请指定备用目录作为参数。


import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
newzip.extractall('newdir')
newzip.close()

getinfo() 方法

此方法返回与给定文件对应的 ZipInfo 对象。ZipInfo 对象包含文件的不同元数据信息。

以下代码从存档中获取 'zen.txt' 的 ZipInfo 对象,并从中检索文件名、大小和日期时间信息。


import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
info = newzip.getinfo('zen.txt')
print (info.filename, info.file_size, info.date_time)
newzip.close()

输出

zen.txt 132 (2023, 3, 30, 21, 55, 48)

infolist() 方法


import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
info = newzip.infolist()
print (info)
newzip.close()	

输出

[<ZipInfo filename='zen.txt' filemode='-rw-rw-rw-' file_size=132>,
<ZipInfo filename='json.txt' filemode='-rw-rw-rw-' file_size=35>]

namelist() 方法

ZipFile 对象的此方法返回存档中所有文件的列表。


import zipfile
newzip=zipfile.ZipFile('newzip.zip','r')
info = newzip.namelist()
print (info)
newzip.close()

输出

['zen.txt', 'json.txt']

setPassword() 方法

此方法设置密码参数,该参数必须在提取存档时提供。