Python:一键扫描并清除/转移敏感文件(DOC、PPT、XLS等)

前言:最近公司某些部门到一线检查,对可能有用户信息的文档要一个个检查,虽然明令禁止,但是因为业务需要总归要有的,所以屡禁不止。为了更快地扫描、清除、转移,所以就编了这个小程序,其实功能和Windows的搜索功能差不多,但是更加便捷一点。
如果要做的更好一点,程序量就大了,比如打开后搜索是否有敏感字,如用户名、11位的手机号码、8位的固定电话、家庭地址等,逻辑复杂度就会很大很大,我是做不到,只能做一个简单的一刀切=_=

12月31日更新:

1、增加了自动检测是否已加入开机自启动的功能
2、增加了输入一遍门店名称后自动保存在本地的功能

import os
import traceback
import shutil
import datetime
import uuid
import socket
import psutil
import win32api
import win32con

def get_panfu(EN_list):
    '''输入需要搜索的盘符'''
    panfu = input('>>>请输入要扫描的盘符(如:C):')
    if panfu.upper() in EN_list:
        panfu = panfu.upper() + ':\\'
    else:
        print('>>>输入错误!请输入正确的盘符!')
        panfu = get_panfu()
    return panfu

def saomiao(panfu):
    '''扫描出敏感文件'''
    doc_list, xls_list, ppt_list, pdf_list = [], [], [], []
    for root, dirs, files in os.walk(panfu, topdown=False):
        for name in files:
            str = os.path.join(root, name)
            if str.split('.')[-1] in ('xlsx', 'xls'):
                xls_list.append(str)
                print('>>>发现Excel文件:{}'.format(str))
            elif str.split('.')[-1] in ('doc', 'docx'):
                doc_list.append(str)
                print('>>>发现Word文件:{}'.format(str))
            elif str.split('.')[-1] in ('ppt', 'pptx'):
                ppt_list.append(str)
                print('>>>发现PPT文件:{}'.format(str))
            elif str.split('.')[-1] == 'pdf':
                pdf_list.append(str)
                print('>>>发现PDF文件:{}'.format(str))
    return doc_list, xls_list, ppt_list, pdf_list

def saomiao2(panfus):
    '''扫描出敏感文件'''
    doc_list, xls_list, ppt_list, pdf_list = [], [], [], []
    for panfu in panfus:
        panfu = panfu.upper() + ':\\'
        for root, dirs, files in os.walk(panfu, topdown=False):
            for name in files:
                temp_str = os.path.join(root, name)
                if temp_str.split('.')[-1] in ('xlsx', 'xls'):
                    xls_list.append(temp_str)
                    print('>>>发现Excel文件:{}'.format(temp_str))
                elif temp_str.split('.')[-1] in ('doc', 'docx'):
                    doc_list.append(temp_str)
                    print('>>>发现Word文件:{}'.format(temp_str))
                elif temp_str.split('.')[-1] in ('ppt', 'pptx'):
                    ppt_list.append(temp_str)
                    print('>>>发现PPT文件:{}'.format(temp_str))
                elif temp_str.split('.')[-1] == 'pdf':
                    if temp_str.split('\\')[-1].startswith('pdf_temp'): #这里是对pdf文件设置了黑名单
                        pdf_list.append(temp_str)
                        print('>>>发现PDF文件:{}'.format(temp_str))
    return doc_list, xls_list, ppt_list, pdf_list

def del_file(filelist):
    '''删除扫描出的敏感文件'''
    for f in filelist:
        os.remove(f)
        print('已删除{}'.format(f))

def move_file(filelist, toAddr):
    '''剪切文件到新地址'''
    for f in filelist:
        try:
            shutil.move(f, toAddr)
            print('文件{}已转移!'.format(f))
        except:
            os.remove(f)
            print('{}重复,已删除!'.format(f))

def get_all_panfu():
    '''自动获取所有盘符'''
    all_panfu = []
    computers = psutil.disk_partitions()
    for panfu in computers:
        all_panfu.append(str(panfu)[18])
    return all_panfu

def get_store_name():
    with open('门店名称.txt', 'r') as f:
        store_name = f.read()
    return store_name

def GetAutoValues(name='auto_del'):
    '''判断是否有加入开机启动'''
    key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, 'Software\\Microsoft\\Windows\\CurrentVersion\\Run', 0, win32con.KEY_READ)
    info = win32api.RegQueryInfoKey(key)
    for i in range(0, info[1]):
        ValueName = win32api.RegEnumValue(key, i)
        # print(str.ljust(ValueName[0],30), ValueName[1])
        if name == ValueName[0]:
            return 1
    win32api.RegCloseKey(key)
    return 0

def WriteAutoValues(name='auto_del'):
    '''自动加入开机启动'''
    path = os.path.abspath('.') + '\\'+ '一键扫描并清除敏感文件.exe'
    KeyName = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
    key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
    win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, path)
    win32api.RegCloseKey(key)
    print('>>>开机启动添加成功!')

try:
    # 设置开机自动启动
    if not GetAutoValues():
        WriteAutoValues()
    # 自动读取或写入门店名称
    store_name = get_store_name()
    if store_name is '':
        store_name = input('>>>请输入营业厅电脑名称(如:张杨路营业厅电脑1):')
        with open('门店名称.txt', 'w') as f:
            f.write(store_name)
    else:
        print('本机的电脑名是:{}'.format(store_name))
    print('>>>扫描时间视文件多少而定,请保持窗口不要关闭!')
    all_panfu = get_all_panfu()
    doc_list, xls_list, ppt_list, pdf_list = saomiao2(all_panfu)
    print('>>>扫描出{}个Word文档,{}个Excel文档,{}个PPT文档'.format(len(doc_list), len(xls_list), len(ppt_list), len(pdf_list)))
    answer = input('>>>请选择怎么处理这些文件?(333:全部删除, 其它:我再想想):')
    if int(answer) == 444:
        del_file(doc_list)
        del_file(xls_list)
        del_file(ppt_list)
        del_file(pdf_list)
        print('>>>已删除敏感文件{}个!'.format((len(doc_list)+len(xls_list)+len(ppt_list)+len(pdf_list))))
    else:
        print('>>>检查出敏感文件{}个,未删除!'.format((len(doc_list)+len(xls_list)+len(ppt_list)+len(pdf_list))))
except:
    traceback.print_exc()
finally:
    mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
    myname = socket.getfqdn(socket.gethostname())
    myaddr = socket.gethostbyname(myname)
    now_time = datetime.datetime.now().strftime('%Y.%m.%d %H:%M:%S')
    print('营业厅名称:{}\n'
          '现在的时间是:{}\n'
          '本机mac地址是:{}\n'
          '本机名字是:{}\n'
          '本机IP地址是:{}'.format(store_name, now_time, mac, myname, myaddr))
    a = input('>>>请输入任意键退出!')
发布了90 篇原创文章 · 获赞 106 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_42029733/article/details/101267113