Python遍历文件夹中的压缩文件自动解压缩到其目录下

文章目录


前言

本文适合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的进程开销不显著,相应地就不需要过多考虑性能的优化。

上一篇:Ubuntu命令行安装Android SDK


下一篇:Scrapy:用cmdline运行爬虫后导致主程序也结束——CrawlerProcesser