栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 解压zip文件之后处理一下,重新打包成zip文件。

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 解压zip文件之后处理一下,重新打包成zip文件。

业务场景: 几年前给一家公司部署了1台win的服务器,这些年运行下来之后,里面有2000个zip文件,每个文件解压之后都会有1个lbd.exe文件,现在发现这个lbdexe文件被病毒感染了,另一台电脑上面有未感染病毒的lbd文件的备份。 需求: 用没毒的lbd.exe文件替换掉有毒的lbdexe文件 方案 思路:遍历当前文件夹内的2000个zip文件,挨个解压到对应的目录,然后把没毒的exe文件直接放进去,此时默认会将有毒的exe文件替换掉。然后把这个文件夹重新打包,这是一台中毒的电脑,这个替换文件的方式不是最好的解决方案,本文章单纯的从技术角度来记录这段代码; 说明 这是面向过程的一段代码,阅读起来非常容易理解,你可以按照你的需求,封装成对应的def都是可以的,今天第一次接触py,研究了1个下午才有了结果,而且试下来非常ok,所以,如果对你有帮助,你可以粘贴我的代码,也不需要署我的名字,只求你可以对本文进行1个点赞操作,这样对我而言是1个反馈,除此之外,别无他求。 代码
import zipfile
import os
import shutil
import time

# 1、遍历当前文件夹内的所有文件
for root, dirs, files in os.walk('./'):
    # time.sleep(2)

    # 删除三个文件夹,可以根据你的业务需求 进行更改
    if os.path.exists('.idea'):
        shutil.rmtree('.idea')

    if os.path.exists('app'):
        shutil.rmtree('app')

    if os.path.exists('data'):
        shutil.rmtree('data')

    for file in files:
        # 2、如果是zip文件的话,就继续处理
        if file.endswith('.zip'):
            # 3、解压zip文件
            test = zipfile.ZipFile(f"{file}")
            # 4、获取zip文件的文件名,解压到同名文件夹内
            file_qian = file.replace('.zip', '')
            test.extractall(file_qian)
            test.close()

            # 5.1、删除旧的zip文件
            os.remove(file)

            # 5.2、将没毒的exe文件替换到这个文件夹
            shutil.copy("C:\Users\Mr.Zhang\Desktop\LBD.exe", file_qian)

            # 6、新建1个zip文件
            Myzip = zipfile.ZipFile(f"{file}", 'w')
            # 7、将文件夹内的文件遍历
            for root, dirs, files in os.walk(file_qian):
                for file in files:
                    # 8、某些文件不需要被打包进去
                    if '.zip' in file or '.py' in file or '.idea' in file or '.DS_Store' in file:
                        continue
                    # 9、将文件打包进去,把目录里的文件夹内的内容打包到zip文件的根目录,而不是zip内的对应目录,这里是个细节;
                    # 你可以去掉string参数。 这样就好了。 Myzip.write(os.path.join(root, file)
                    string = os.path.join(root, file).replace(f'{file_qian}\', '/')
                    Myzip.write(os.path.join(root, file), string)
            Myzip.close()

            # 10、我这里有2000个zip文件,解压出来之后就是2000个文件夹,所以我每次做好1个 就删掉1个,不然的话,内容就4000个,太多了。
            if os.path.exists(file_qian):
                shutil.rmtree(file_qian)
    # time.sleep(2)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号