Python zipfile模块
ZIP是最常用的文件格式之一,用于存档和压缩。自MSDOS和PC时代以来,它就被广泛使用,并且被著名的PKZIP应用程序使用。
Python的标准库提供了zipfile模块,其中包含了用于创建、提取、读取和写入ZIP存档的类。
ZipFile()函数
此函数从文件参数返回一个ZipFile对象,文件参数可以是由内置的open()函数创建的字符串或文件对象。该函数需要一个模式参数,默认值为’r’,但也可以使用’w’或’a’值以相应的只读、写入或追加模式打开存档。
存档默认情况下是未压缩的。要指定要使用的压缩算法类型,必须将其中一个常量赋值给压缩参数。
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() 方法
此方法设置密码参数,必须在提取归档时提供。