zipfile 模块



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

Python 的标准库提供 zipfile 模块,其中包含用于创建、提取、读取和写入 ZIP 存档的类。

ZipFile() 函数

此函数根据文件参数返回一个 ZipFile 对象,该参数可以是字符串或文件对象(由内置 open() 函数创建)。该函数需要一个 mode 参数,其默认值为 'r',尽管它可以取 '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       2023-03-30 21:55:48          132
json.txt      2023-04-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() 方法

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

python_data_compression.htm
广告