您的位置:首页 > 编程语言 > Python开发

python基础-文件目录压缩(zipfile模块)

2018-01-15 17:47 691 查看


用zip压缩文件

利用zipfile模块中的函数,Python程序可以创建和打开(或解压)zip文件


创建和添加到zip文件

#要创建zip文件,以写模式打开ZipFile即可
>>>import zipfile
>>>newZip=zipfile.ZipFile('new.zip','w')

#添加压缩文件
#将bldir.py文件添加到压缩文件
>>>newZip.write('bldir.py',compress_type=zipfile.ZIP_DEFLATED)
>>>newZip.close()
#1.以'w'打开压缩文件,将先擦除zip文件所有原有的文件,如果只希望将文件添加,第二个参数可以传'a',以添加模式打开
#2.结束后一定要关闭文件,不然会一直占用该文件。


读取zip文件

>>>import zipfile,os
>>>eZip=zipfile.ZipFile('new.zip')
#文件/文件夹名称列表
>>>eZip.namelist()
['bldir.py', 'img/', '.idea/', 'err1.py']
#获取某个文件的信息
>>>info=eZip.getinfo('bldir.py')
#该文件的大小(单位:字节)
>>>info.file_size
>>>eZip.close()



解压缩

ZipFile对象的extractall()方法可以解压文件,默认为当前工作目录
>>>eZip=zipfile.ZipFile('new.zip')
>>>eZip.extractall()
>>>eZip.close()


压缩文件/文件夹

#path 文件或文件夹的地址
#zipPath 将压缩后的zip保存到哪个目录下,不传则是当前目录
#suffix 压缩后缀名,默认为zip
def createZip(path='',zipPath='',suffix='zip'):
import os,zipfile
path=os.path.abspath(path) #转为绝对路径
suffix='.'+suffix.lstrip('.')#确保最后后缀名只以'.'开头
compress=['.zip','.rar']
if os.path.isdir(path):
#如果传入的是目录
if(os.path.splitext(zipPath)[1] not in compress):
#以目录名作为压缩文件的名称
dirname=os.path.split(path)[1]
zipPath=os.path.join(zipPath,(dirname+suffix))
newZip=zipfile.ZipFile(zipPath,'a')
for dirpath,dirnames,filenames in os.walk(path):
for dirname in dirnames:
#这个循环是为了保证空目录也可以被压缩
dp=filepath=os.path.join(dirpath,dirname)
newZip.write(dp,dp[len(path):]) #重命名
for filename in filenames:
filepath=os.path.join(dirpath,filename)
newZip.write(filepath,filepath[len(path):]) #重命名(去掉文件名前面的绝对路径)

elif os.path.isfile(path):
#如果传入的是文件
if(os.path.splitext(zipPath)[1] not in compress):
filename=os.path.splitext(path)
filename=os.path.split(filename[0])[1]
zipPath=os.path.join(zipPath,(filename+suffix))

newZip=zipfile.ZipFile(zipPath,'a') #以添加模式打开压缩文件
newZip.write(path,path[len(os.path.split(path)[0]):]) #重命名(去掉文件名前面的绝对路径)

else:
return '你妹的,你倒是传个你要压缩的文件或文件夹啊'
newZip.close()
return '压缩成功'


功能:

1.可以传文件或目录
空目录也会被压缩


2.传入方式
#1传文件,可以不指定压缩文件名,默认压缩文件名为原文件名,这里是blidir.zip
>>>createZip('D:\\py\\www\\bldir.py','D:\\py\\www')
#2传文件,指定压缩文件名
createZip('D:\\py\\www\\bldir.py','D:\\py\\www\\bldir1.zip')
#3传目录,同样可以指定或不指定压缩文件名,也可以压缩为其他压缩文件
>>>createZip('D:\\py\\www\\ast','D:\\py\\www\\ast1.rar')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python zipfile 压缩