用python操作zip文件的打包压缩与解压,可以使用zipfile模块。zipfile中包含ZipFile,PyZipFile和ZipInfo三个对象,ZipFile和ZipInfo最常用。其中:
ZipFile:创建和读取zip文件
ZipInfo:存储zip文件中每个文件的信息
1、ZipFile对象
import zipfile
# 1、创建一个ZipFile对象,可以是r,a,w模式创建
with zipfile.ZipFile('test.zip','w') as f:
# 向zip压缩文件中添加新文件
f.write('test.csv')
f.write('盗墓笔记.txt')
# 2、打开一个zip文件
z=zipfile.ZipFile('test.zip','r')
# 3、返回zip文件中文件的字节,果果有password,需制定pwd参数
a1 = z.read('test.csv')
print("a1:",a1)
# 4、代开zip文件中的一个文件
z.open("盗墓笔记.txt")
# 5、关闭ZipFile对象
# z.close()
# 6、返回一个包含存档成员名称信息的ZipInfo对象,调用getinfo()存档中当前未包
# 含的名称将引发一个KeyError
a2 = z.getinfo('test.csv')
print("a2:",a2)
# 7、返回一个包含存档成员名称列表
a3 = z.namelist()
print("a3:",a3)
# 8、返回一个包含全部存档成员信息的ZipInfo对象的列表
a4 = z.infolist()
print("a4:",a4)
# 9、将pwd设置为默认密码以提取加密文件
z.setpassword(b"123")
# 10、将成员从zip存档中解压到当前工作目录; member必须是其全名或ZipInfo对象,
# path为指定的解压路径,pwd为解压密码
z.extract(member='test.csv', path='data/demo', pwd=b"123")
# 11、将成员从zip存档中解压到当前工作目录; member必须是ZipFile.namelist()的
# 子集列表或元祖,path为指定的解压路径,pwd为解压密码
z.extractall(path='data/demo', members=['盗墓笔记.txt'], pwd=b"123")
输出>>>
a1: b'id,name,age\r\n1,\xf7\xbc\xf7\xc3\xc6\xef\xca\xbf,500\r\n2,\xe7\xb3\xba\xec\xc5\xae\xce\xd7,20\r\n3,\xc3\xc0\xb9\xfa\xb6\xd3\xb3\xa4,200\r\n'
a2: <ZipInfo filename='test.csv' filemode='-rw-rw-rw-' file_size=60>
a3: ['test.csv', '盗墓笔记.txt']
a4: [<ZipInfo filename='test.csv' filemode='-rw-rw-rw-' file_size=60>, <ZipInfo filename='盗墓笔记.txt' filemode='-rw-rw-rw-' file_size=8932>]
2、ZipInfo对象
ZipInfo
对象由ZipFile对象的getinfo()
和 infolist()
方法返回。每个对象都存储有关ZIP存档的单个成员的信息,具体有以下常用属性
z=zipfile.ZipFile('test.zip','r')
file = z.getinfo('test.csv')
# 1、存档中文件的名称
file_name = file.filename
print(file_name)
# 2、上次修改存档成员的时间和日期,是一个六个值的元祖(年,月,日,时,分,秒)
datetime = file.date_time
print(datetime)
# 3、压缩数据的大小
compress_size= file.compress_size
print(compress_size)
# 4、未压缩文件的大小
file_size = file.file_size
print(file_size)
输出>>>
test.csv
(2019, 8, 18, 1, 33, 40)
60
60