本文适合Python初学者,介绍Python遍历文件夹,自动创建文件夹、调用7z命令来解压缩文件、删除压缩文件
个人的移动硬盘中有100多GB,差不多1千多个压缩文件,分散在不同目录层级中。目标:
1.遍历指定文件夹下所有目录及文件;
2.发现压缩文件(zip格式);
3.创建与压缩文件同名的文件夹,执行解压缩操作;
4.解压缩成功后,删除压缩文件;
尝试用批处理命令或者bash脚本来,但都不能达成以上全部要求。百度和Google看了一下,在Stackoverflow里有类似的帖子,纯命令行方式有困难。转而考虑用python来实现。
Python代码如下(示例):
import os import sys import subprocess if len(sys.argv) < 2: sys.exit("Please specify the dirctory ...") read_path = sys.argv[1] print('Try to unzip archives recursively under the director ' + read_path) for root, dirs, files in os.walk(read_path): for name in files: if name.endswith('.zip'): file_name = os.path.splitext(name)[0] unzippath = os.path.join(root,file_name) # 创建目录 if not os.path.exists(unzippath): os.mkdir(unzippath) print("Create directory:" + unzippath) # 解压缩文件 cmdline = '7z x -y -o' + '"' + unzippath + '" "' + os.path.join(root,name) + '"' print("Unzip:" + cmdline) sub = subprocess.Popen(cmdline,shell=True,stdout=subprocess.PIPE) sub.wait() # 删除已解压缩的文件 cmdline = 'del /Q ' + '"' + os.path.join(root,name) + '"' print("Delete:" + cmdline) sub = subprocess.Popen(cmdline,shell=True,stdout=subprocess.PIPE) sub.wait()
在Windows命令行下运行:
c>python unzip.py G:\files
注意这里使用的是7z.exe来执行解压缩,确保7z.exe的目录已添加到Windows的Path变量中。
相比较其他脚本语言或高级语言的实现,python的实现简洁。代码执行主要操作时间都花费在7z的解压缩操作中,python调用7z的进程开销不显著,相应地就不需要过多考虑性能的优化。