前言:最近公司某些部门到一线检查,对可能有用户信息的文档要一个个检查,虽然明令禁止,但是因为业务需要总归要有的,所以屡禁不止。为了更快地扫描、清除、转移,所以就编了这个小程序,其实功能和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('>>>请输入任意键退出!')