业务场景:
几年前给一家公司部署了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)
|