python 调用bat失败_windows下使用python+7zip实现批量解压

ade8ed205fd1d41680203f8696d4656b.png

背景

在windows平台,从某网站上通过批量下载很多(数百个)的压缩文件,需要提前压缩包里面的文件。 

分析

在linux下可以很方便的使用shell来完成

当然在windows下也可以通过批处理完成,奈何不熟悉批处理语法

还是选择熟悉的python来完成吧

总体思路

  1. 获取压缩包目录下的所有压缩文件
  2. 循环执行解压命令

技术细节

python读取文件

程序说明见注释,需要传入文件路径以及压缩文件的后缀,后缀可以为空,为空则返回所有文件

实现以来os模块的listdir接口

获取到所有文件接口之后,判断是否为传入的后缀文件,传入则保存


def GetFileListByType(dirPath,fileFlag=[]):
    '''
    在dirPath目录下,获取fileFlag指定类型的所有文件,只检查dirPath,不递归检查其子目录
    :param dirPath: 目录路径
    :param fileFlag: 文件类型列表,指文件的后缀名,例如:[".c",".cpp"]
    :return: fileList
    '''
    import os
    fileList=[]
    fileNames=os.listdir(dirPath)
    if (len(fileNames)>0):
       for fn in fileNames:
           if (len(fileFlag)>0):
               #返回指定类型的文件名
               if (IsHaveSubString(fileFlag,fn)):
                   #fullfilename=os.path.join(FindPath,fn)
                   fileList.append(fn)
           else:
               #默认直接返回所有文件名
               #fullfilename=os.path.join(FindPath,fn)
               fileList.append(fn)

    #对文件名排序
    if (len(fileList)>0):
        fileList.sort()
    return fileList

判断是否为传入类型后缀的文件

def IsHaveSubString(SubStrList,Str):
    """
    #判断字符串Str是否包含序列SubStrList中的一个子字符串
    #>>>SubStrList=['zip','rar','7z']
    #>>>Str='F06925EMS91.zip'
    #>>>IsSubString(SubStrList,Str)#return True (or False)
    """
    flag=False
    for subStr in SubStrList:
        if subStr in Str:
            flag=True
            break
    return flag

调用windows进程

调用mkdir来创建一个保存解压后文件的路径

def mkOneDir(path, subpath):
    '''
    在path目录下创建subpath
    :param path: 在path目录下创建
    :param subpath: 创建的子目录
    :return:
    '''

    cmdStr = 'mkdir '+path+"\\"+ subpath
    try:
        import os

        recode =os.system(cmdStr)

        return True
    except Exception as e:
        print(e)
        return False

调用文件接口,保存解压成功和失败的文件清单

# ----创建两个文件--------

循环遍历所有符合条件的文件,进行解压

for f 

这里可以自定义解压的程序,如可以使用7zip或者rar以及其他

解压的参数可以根据解压的程序自行构建,这里使用7zip来解压,构建的命令如下

cmdStr = program7zPath + " e " + filePath + "\" + f + " -o" + targetFilePath  + " -y"

具体的参数可以参考7zip的官方解释

解压成功之后,记录成功文件,然后执行下一个文件

程序入口

在开始调用程序前,需要指定待解压的文件目录,解压的程序

if __name__==

总结

如果是linux下,通过shell一条命令即可解决。但是windows下不熟悉bat脚本,还是使用常见的python来完成吧。这里提供了一种思路,供参考。

选择不同的解压程序,构建的解压命令是不一样的,是单独释放到一个新的文件夹还是在释放到当前文件目录,可以根据解压程序来设置。

如果想要完整代码,请私信。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值