ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python 删除顽固文件的处理办法

2022-01-14 19:00:46  阅读:218  来源: 互联网

标签:exe logging 删除 python del 顽固 dict path os


记录一个之前遇到的事情. 

有的时候装了一个安装包后, 没有卸载入口. 进程杀了后, 过不了多久还会自己启动. 文件非常难删除. 基本上都是在和电脑拼手速.

你知道它的安装位置和文件 ,但你就是很难搞死它. 我知道你也遇到过对不对? 

 


照例先搬运相关知识点:

今天要用到 os 和 sys 模块

os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

使用参考: https://www.runoob.com/python/os-walk.html

os.popen() 方法用于从一个命令打开一个管道。

使用参考: https://www.runoob.com/python/os-popen.html

os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。

使用参考: https://www.runoob.com/python/os-remove.html

os.removedirs() 方法用于递归删除目录。像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般意味着你文件夹不为空)。

使用参考: https://www.runoob.com/python/os-removedirs.html

os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。

使用参考:  https://www.runoob.com/python/os-rmdir.html

 


sys.argv[]

说白了就是一个从程序外部获取参数的桥梁。

因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。

其第一个元素是程序本身,随后才依次是外部给予的参数。

import sys
a=sys.argv[0]
print(a)

可以自己试试看输入的是不是你当前运行路径


实现思路: 获取当前路径-->获取路径下所有文件-->找到exe文件-->关闭exe文件(自身除外)-->删除所有文件-->删除文件夹-->结束

源码如下:

import os
import time
import logging
import sys


def set_log(log_name):
    # 设置log格式
    LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
    DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"
    logging.basicConfig(filename=log_name, level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT)


def get_file_dict(_path):
"""获取所有文件列表"""
    files_dict = {}
    for root, dirs, files in os.walk(_path):  # 获取该文件夹下所有文件
        logging.debug("获取文件夹下所有文件 get_file_dict({}):{}{}{}".format(local_path, root, dirs, files))
        for file in files:
            files_dict[file] = root
    logging.debug("return path_dict:{}".format(files_dict))
    return files_dict


def kill_exe(name_exe):
    cmd = 'taskkill /f /im ' + '\"' + name_exe + '\"'  # 关闭进程命令
    os.popen(cmd)  # popen()执行速度快,无显    # os.system(cmd)  # 多一个显示,执行速度慢
    logging.debug("kill_exe({}):{}".format(name_exe, cmd))


def del_file(path_dict, run_exe):
for key in path_dict:
        if str(key) == str(run_exe) or key == 'log.log':
            pass
        else:
            _path = path_dict[key] + '\\' + key
            try:
                os.remove(_path)
                logging.info("DELETE FILE SUCCESS {}".format(_path))
            except Exception as e:
                logging.error("os.remove({}):{}".format(_path, e))


def del_dir(_path):
""" 删除文件夹 """
    for root, dirs, files in os.walk(_path):
        if dirs == [] and files == []:
            try:
                os.rmdir(root)
                logging.info("DELETE DIR SUCCESS {}".format(root))

            except Exception as e:
                logging.error("os.rmdir({}):{}".format(root, e))


def close_all_exe(path_dict, run_exe):
for key in path_dict:
        if str(key) == str(run_exe):
            continue
        if key.endswith('exe'):
       logging.debug("kill_exe:".format(key))


if __name__ == '__main__':
    set_log("del.log")

    local_path = sys.argv[0]  # 获取运行路径
    # 当前运行程序名字
    del_exe = ''
    if '\\' in local_path:
        del_exe = local_path.split("\\")[-1]
        logging.debug(f"del_exe:{del_exe}")

    if '/' in local_path:
        del_exe = local_path.split("/")[-1]
        logging.debug(f"del_exe:{del_exe}")

    path = os.getcwd()  # 获取当前文件夹路径
    path_dict = get_file_dict(path)  
    logging.INFO("开始执行...")
    while True:                              # 在实际操作中,因为对方程序异常顽强故用了死循环,手动关闭程序结束流程
        # 关闭exe进程
        close_all_exe(path_dict, del_exe)
        time.sleep(5)
        # 获取其他文件 删除
        del_file(path_dict, del_exe)
        # 删除空文件夹s
        del_dir(local_path)

 

标签:exe,logging,删除,python,del,顽固,dict,path,os
来源: https://www.cnblogs.com/Mrzyz/p/15803220.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有