沦沦博客小屋
记录技术生活点滴

导航

 

公司另一个部门的小需求,一个业务系统生成的加密压缩包增加多出来了个文件,目前如果手工删除的话工作量会很大,所以找到安全组这边需求帮助,我这边看了下需求:(原文件有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])

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

posted on 2022-06-01 09:31  沦沦  阅读(249)  评论(0编辑  收藏  举报