• Python批量删除加密压缩包内指定文件脚本


    公司另一个部门的小需求,一个业务系统生成的加密压缩包增加多出来了个文件,目前如果手工删除的话工作量会很大,所以找到安全组这边需求帮助,我这边看了下需求:(原文件有1000+个dwc需要把格式dwc转为zip然后批量删除zip里的指定文件tzwj.csv,再批量把zip转回dwc)
    首先完成第一个功能dwc转为zip,这个功能使用递归读取文件然后批量把后缀改为zip就可以了,代码如下:

    import os
    import sys
    
    def rename(path):
        oldpath = path
        pos1 = path.find('.dcw')
        newpath = path[:pos1]+'.zip'
        os.rename(path, newpath)
    
    def zipscan(path):
        files = os.listdir(path)
        for file in files:
            try:
                file_path = os.path.join(path, file)
                if os.path.isdir(file_path):
                    zipscan(file_path)
                else:
                    print(file_path)
                    extension_name = os.path.splitext(
                        file_path)
                    if extension_name[1] == '.dcw':
                        rename(file_path)
            except:
                continue
    

    批量删除zip里的指定文件tzwj.csv功能,这个最开始我是使用zipfile模块进行尝试删除但这里有个前提条件他的压缩包全是随机加密生成的,通过有密码的压缩包删除里面指定的文件该模块不支持无法实现,后面通过多次测试发现通过linux下面zip -d命令可以在有密码的情况下删除指定文件,最终实现代码如下:

    def oslinux(path):
        files = os.listdir(path)
        for file in files:
            try:
                file_path = os.path.join(path, file)
                os.system("zip -d "+file_path.strip()+" tzwj.csv")
                print(file_path)
            except:
                continue
    

    zip转回dwc功能这个就简单了和上一个dwc转zip格式一样相互替换就可以了,代码如下:

    def rename_dcw(path):
        oldpath = path
        pos1 = path.find('.zip')
        newpath = path[:pos1]+'.dcw'
        os.rename(path, newpath)
    
    def dcwscan(path):
        files = os.listdir(path)
        for file in files:
            try:
                file_path = os.path.join(path, file)
                if os.path.isdir(file_path):
                    dcwscan(file_path)
                else:
                    print(file_path)
                    extension_name = os.path.splitext(
                        file_path)
                    if extension_name[1] == '.zip':
                        rename_dcw(file_path)
            except:
                continue
    

    最终完成代码脚本如下:

    #coding=utf-8
    
    # -*- coding:utf8 -*-
     
    import os
    import sys
        
     
    def rename(path):
        oldpath = path
        pos1 = path.find('.dcw')
        newpath = path[:pos1]+'.zip'
        os.rename(path, newpath)
     
    def zipscan(path):
        files = os.listdir(path)
        for file in files:
            try:
                file_path = os.path.join(path, file)
                if os.path.isdir(file_path):
                    zipscan(file_path)
                else:
                    print(file_path)
                    extension_name = os.path.splitext(
                        file_path)
                    if extension_name[1] == '.dcw':
                        rename(file_path)
            except:
                continue
    
    def rename_dcw(path):
        oldpath = path
        pos1 = path.find('.zip')
        newpath = path[:pos1]+'.dcw'
        os.rename(path, newpath)
     
    def dcwscan(path):
        files = os.listdir(path)
        for file in files:
            try:
                file_path = os.path.join(path, file)
                if os.path.isdir(file_path):
                    dcwscan(file_path)
                else:
                    print(file_path)
                    extension_name = os.path.splitext(
                        file_path)
                    if extension_name[1] == '.zip':
                        rename_dcw(file_path)
            except:
                continue
    
    def oslinux(path):
        files = os.listdir(path)
        for file in files:
            try:
                file_path = os.path.join(path, file)
                os.system("zip -d "+file_path.strip()+" tzwj.csv")
                print(file_path)
            except:
                continue
    
    if __name__ == '__main__':
        if sys.argv[1] == "zip":
            zipscan(sys.argv[2])
        if sys.argv[1] == "dcw":
            dcwscan(sys.argv[2])
        if sys.argv[1] == "linux":  
            oslinux(sys.argv[2])
    

    执行结果可以完成所有需求的转换和删除

  • 相关阅读:
    20165204 缓冲区溢出漏洞实验
    2019-2020 1 20175230 实验四 外设驱动程序设计
    2019-2020-1 20175230 实验三 并发程序
    2019-2020-1 20175208 20175218 20175230 实验二 固件程序设计
    2019-2020-1 20175208 20175218 20175230 实验一 开发环境的熟悉
    2018-2019-2 20175230 实验五《网络编程与安全》实验报告
    2018-2019-2 20175230实验四 《Android开发基础》实验报告
    2018-2019 2 20175230《Java程序设计》第十一周学习总结
    2018-2019-2 20175230 实验三《Java面向对象程序设计》实验报告
    MyCP
  • 原文地址:https://www.cnblogs.com/jicklun/p/16333189.html
Copyright © 2020-2023  润新知