最近用python对zip文件进行解压,处理后在压缩回去。解压的函数如下:
def Zip(dirname,zipfilename):
filelist = []
if os.path.isfile(dirname):
filelist.append(dirname)
else :
for root, dirs, files in os.walk(dirname,topdown=False):
for name in files:
filelist.append(os.path.join(root, name))
zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
zf.write(tar,arcname)
zf.close()
return ''
发现再压缩时里面的空文件夹不见了,很是奇怪,原来是递归的时候过滤掉了。加上即可,判断是否为空的文件夹,是的话就加上:
if not files and not dirs:
filelist.append(root)
完整代码如下:
def Zip(dirname,zipfilename):
filelist = []
if os.path.isfile(dirname):
filelist.append(dirname)
else :
for root, dirs, files in os.walk(dirname,topdown=False):
if not files and not dirs:
filelist.append(root)
for name in files:
filelist.append(os.path.join(root, name))
zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
zf.write(tar,arcname)
zf.close()
return ''