不知道有没有小伙伴跟我一样犯这样的懒,一些简单重复的工作,总是嫌麻烦,懒得一步步去做,还每次都重复一样的操作。比如解压zip或rar的包,也许你会说,不就解压嘛,有啥的。问题来了,如果只是一个简单的压缩包也是算了,关键是压缩包里还有压缩包,也不知道多少层,要一层层去解压,这就比较恶心了吧?如下图:
学习了Python的递归调用后,心想,为什么我不写一个脚本自动解压所有的压缩包呢?emmm....心动不如行动,说写就写,谁让我是这么懒的一个人呢,连解压都得自动化,哈哈哈。
那就来吧,先从最简单的开始,搞个zip包用命令行解压看看:
# -*- coding: utf-8 -*- import zipfile import os path = r'C:\Users\ES-IT-PC-193\Desktop\aa\A.zip' z = zipfile.ZipFile(path, 'r') unzip_path = os.path.split(path)[0] #解压路径 z.extractall(path=unzip_path)
嗯,试了试,没问题,能正常解压。那接下来就是解决如果把压缩包里包含压缩包的也一块解压了,那我得把解压的命令封装成函数,然后循环解压就好了。这里正好用上了刚学不久的递归调用。
# -*- coding: utf-8 -*- # 2019/8/13 14:57 import zipfile import os def unzip_file(path): '''解压zip包''' if os.path.exists(path): if path.endswith('.zip'): z = zipfile.ZipFile(path, 'r') unzip_path = os.path.split(path)[0] z.extractall(path=unzip_path) zip_list = z.namelist() # 返回解压后的所有文件夹和文件 for zip_file in zip_list: new_path = os.path.join(unzip_path,zip_file) unzip_file(new_path) z.close() elif os.path.isdir(path): for file_name in os.listdir(path): unzip_file(os.path.join(path, file_name)) else: print('