今天用python zipfile模块写了一个文件夹打包zip和解包zip程序,感觉python真是强大,短短几行代码就能实现,越来越喜欢python了.
压缩文件夹时需要遍历整个目录,这里有两个函数需要特别注意: os.walk(...)和os.path.walk().
这两个函数的返回值是有些区别的
os.walk(path)会返回path目录下的所有文件(注意是所有文件)列表,而没有子目录下的文件
os.path.walk(path)会遍历所有文件和子目录下的文件,不过他的调用方式有些特别
------------------------------------------------------------------
def walkfiles(arg, dir, files):
pass
os.path.walk(path, walkfiles, arg)
------------------------------------------------------------------
os.path.walk第一个参数就是你要遍历的文件夹名,walkfiles是一个回调函数,它会针对每一个文件夹进行调用,所以walkfiles(...)的第2个参数我写成dir,它代码当前遍历的文件夹名,files则表示文件夹下的文件列表.os.path.walk的第3个参数是一个附加参数,它将会不加修改地传递给walkfiles(arg, ...),用惯回调的话,这个肯定懂得.
下面代码压缩当前工程目录,并解压
import os
import zipfile
def zip_path(path, zip):
def seefiles(arg, dir, files):
z = arg[0]
toppath = arg[1]
for f in files:
z.write(os.path.join(dir.strip(toppath), f))
zf = zipfile.ZipFile(file=zip, mode='w')
os.path.walk(path, seefiles, (zf, path))
zf.close()
def unzip(zip, dstpath):
os.mkdir(dstpath)
zf = zipfile.ZipFile(file=zip, mode="r")
for f in zf.namelist():
if os.path.isdir(f):
os.mkdir(os.path.join(dstpath, f))
else:
out = open(os.path.join(dstpath, f), "wb")
out.write(zf.read(f))
out.close()
zf.close()
if __name__ == '__main__':
zip_path(os.getcwd(), "../hhh.zip")
unzip("../hhh.zip", os.path.join(os.getcwd(), "../hh2/"))
阅读(3258) | 评论(0) | 转发(0) |