zipfile
一、创建一个ZipFile对象,表示一个zip文件
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
参数file表示文件的路径或类文件对象(file-like object)
参数mode指示打开zip文件的模式,默认值为'r',表示读已经存在的zip文件,也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的zip文档,'a'表示将数据附加到一个现存的zip文档中。
参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。
如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。
二、常用功能
zipfile里有两个非常常用的class, 分别是ZipFile和ZipInfo,ZipFile用来创建和读取zip文件,ZipInfo是存储的zip文件的每个文件的信息的
1、zipfile.is_zipfile(filename)
判断一个文件是否为压缩文件
2、ZipFile.namelist()
获取zip文档内所有文件的名称列表
import zipfile
f = zipfile.ZipFile(filename, 'r') #r表示是读取zip文件,w或a是创建一个zip文件
for f_name in f.namelist(): #.namelist() 返回压缩包内所有文件名的列表
print(f_name)
3、ZipFile.extract(member[, path[, pwd]])
将zip文档内的指定文件解压到当前目录。参数member指定要解压的文件名称或对应的ZipInfo对象;参数path指定了解析文件保存的文件夹;参数pwd为解压密码
import zipfile, os
f = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip')) #拼接成一个路径
for file in f.namelist():
f.extract(file, r'd:/Work') #在d:/Work中解压文件
f.close()
三、循环解压
该代码能遍历压缩包中的文件夹,遇到子压缩包,能够再次解压,直到解压完所有子压缩包。
“参数”的作用是:不删除原始压缩包,而删除所有子压缩包
import os, zipfile
class UnZip():
def scan(self, source_dir):
files = os.listdir(source_dir)
n = 0
for sub_file in files:
n += 1
sub_file_path = os.path.join(source_dir, sub_file)
if os.path.isdir(sub_file_path):
self.scan(sub_file_path)
else:
if sub_file_path.lower().endswith('.zip'):
print('hi')
output_sub_dir = sub_file_path[:-4]
self.unzip(sub_file_path, output_sub_dir)
self.scan(output_sub_dir)
if n != 1:
os.remove(sub_file_path)
def unzip(self, file, folder):
fz = zipfile.ZipFile(file, 'r')
for sub_file_name in fz.namelist():
fz.extract(sub_file_name, folder)
if __name__ == '__main__':
UnZip().scan(r'D:\Projects\CA\script')