前段时间在工作过程中,需要对压缩包集中的某一类文件进行批量解压。如果手动解压压缩包,解压完成后还需要手动删除不同目录下的其它文件。而且当压缩包数量较大时,操作起来更为费劲。因此,为了偷懒,便随手写了这个小程序。
程序段很短,代码如下所示:
import zipfile
import tarfile
import rarfile
import os
import shutil
from glob import glob
import sys
Pos_zip=sys.argv[1]
Pos_unzip=sys.argv[2]
Type=sys.argv[3]
files = glob(Pos_zip)
def un_zip(filename):
zip_file = zipfile.ZipFile(filename)
a_name=zip_file.namelist()
if (filename.find(".zip")) > -1:
zip_file = zipfile.ZipFile(filename)
a_name=zip_file.namelist()
if (filename.find(".tar")) > -1:
zip_file = tarfile.open(filename)
a_name=zip_file.getnames()
if (filename.find(".rar")) > -1:
zip_file = rarfile.RarFile(filename)
a_name=zip_file.namelist()
for names in a_name:
if (names.find(Type)) > -1:
try:
zip_file.extract(names,Pos_unzip)
except:
print(filename+"解压失败!")
pass
print (filename+"解压完成!")
for file_name in files:
un_zip(file_name)
程序主要思路为:1.先将需要解压的所有压缩文件的文件名进行读取;2.从步骤1中读取一个压缩文件名,对此压缩文件类型进行判断;3.根据步骤2中判断压缩文件类型,对压缩文件中的文件进行提取;4判断步骤1的压缩文件是否都遍历,若是,则程序结束,否则返回步骤2.
在此给大家展示一个程序示例:
一个目录下有3个不同格式的压缩文件(当然压缩文件数量还可以增加,这里举个例子),三个压缩文件如下图所示:
在Sample1.zip文件中存在以下文件:
在Sample2.zip文件中存在以下文件:
在Sample3.tar文件中存在以下文件:
我们需要将这个三个文件中的RTF格式文件解压出的话,即输入如下所示的命令:
此命令中包含三个参数:第一个参数为压缩包存放的源目录地址;第二个参数为解压文件存放的目录地址;第三个参数为需要解压的文件名后缀,例如在本例中解压RTF格式文件后缀为“.rtf”。
程序运行结束后:
我们可以看到三个压缩文件中的所有RTF格式文件均被解压出来了。
程序源码及测试用例下载地址:https://github.com/XiaoYaoNet/Zip