zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了
比如要读取一个zipfile,这里假设filename是一个文件的路径:
import zipfile z = zipfile.ZipFile(filename, 'r') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件 for f in z.namelist(): print(f)
上面的代码是读取一个zip压缩包里所有文件的名字。z.namelist() 会返回压缩包内所有文件名的列表。
再看看下面一个:
import zipfile z = zipfile.ZipFile(filename, 'r') for i in z.infolist(): print(i.file_size, i.header_offset)
这里使用了z.infolist(), 它返回的就是压缩包内所有文件的信息,就是一个ZipInfo的列表。一个ZopInfo对象中包含了压缩包内一个文件的信息,其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。其实之前的z.namelist()就是读取的ZopInfo中的filename,组成一个 list返回的。
从压缩包里解压缩出一个文件的方法是使用ZipFile的read方法:
import zipfile z = zipfile.ZipFile(filename, 'r') print(z.read(z.namelist()[0]))
这样就读取出z.namelist()中的第一个文件,并且输出到屏幕,当然也可以把它存储到文件
下面上了一个压缩解压的例子
#!/usr/bin/python3
#coding:utf-8
import os
import zipfile
def zip_dir(file_path,zfile_path):
'''
function:压缩
params:
file_path:要压缩的件路径,可以是文件夹
zfile_path:解压缩路径
description:可以在python2执行
'''
filelist = []
if os.path.isfile(file_path):
filelist.append(file_path)
else :
for root, dirs, files in os.walk(file_path):
for name in files:
filelist.append(os.path.join(root, name))
print('joined:',os.path.join(root, name),dirs)
zf = zipfile.ZipFile(zfile_path, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(file_path):]
zf.write(tar,arcname)
zf.close()
def unzip_file(zfile_path, unzip_dir):
'''
function:解压
params:
zfile_path:压缩文件路径
unzip_dir:解压缩路径
description:
'''
try:
with zipfile.ZipFile(zfile_path) as zfile:
zfile.extractall(path=unzip_dir)
except:
print (zfile_path+" is a bad zip file ,please check!")
if __name__ == '__main__':
#压缩
zip_dir(r'D:/www/api',r'D:/www/api.zip')
#解压
unzip_file(r'D:/www/api.zip',r'D:/www/api')内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/574
评论列表