文章目录
前言
本文适合Python初学者,介绍Python遍历文件夹,自动创建文件夹、调用7z命令来解压缩文件、删除压缩文件
一、问题?
个人的移动硬盘中有100多GB,差不多1千多个压缩文件,分散在不同目录层级中。目标:
1.遍历指定文件夹下所有目录及文件;
2.发现压缩文件(zip格式);
3.创建与压缩文件同名的文件夹,执行解压缩操作;
4.解压缩成功后,删除压缩文件;
尝试用批处理命令或者bash脚本来,但都不能达成以上全部要求。百度和Google看了一下,在*里有类似的帖子,纯命令行方式有困难。转而考虑用python来实现。
二、使用步骤
采用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()
2.执行
在Windows命令行下运行:
c>python unzip.py G:\files
注意这里使用的是7z.exe来执行解压缩,确保7z.exe的目录已添加到Windows的Path变量中。
总结
相比较其他脚本语言或高级语言的实现,python的实现简洁。代码执行主要操作时间都花费在7z的解压缩操作中,python调用7z的进程开销不显著,相应地就不需要过多考虑性能的优化。