引子
近日,单位应上级要求清理一批文件,关键字这里就不写了。所有职工都要进行清理,通过口头转述自行清理,但是领导不放心要求每个人的电脑再查看一看,是否清理干净。如果通知windows内置的搜索,输入关键是都是一大片,非常麻烦。又因学习了一段时间的python,所以起了用python遍历全盘查找文件的心思。
完整代码,高手勿喷
import os
import subprocess
import sys
import time
def searth(path,keys):
"对path中的关键字进行查找"
searth_ls=[]
error=[]
try:
for root, dirnames,files in os.walk(path,topdown=False):
if root.count(r"C:\Windows")>0:
continue
print(root)
for name in files:
for key in keys:
if key in name:
# print(os.path.join(root,name))
searth_ls.append(os.path.join(root,name))
except Exception as e:
print("error:{}".format(e))
error.append(e)
return searth_ls, error
def getdisk():
"获取盘符"
disk_ls=[]
for i in range(65,91):
vol = chr(i) + ':\\'
if os.path.isdir(vol):
disk_ls.append(vol)
return disk_ls
def wirte_file(name,ls):
"把ls列表写入到name文件中"
f=open(name,'w',encoding='utf-8')
f.write("\n".join(ls))
f.close()
def disproce_findall(find_all,start_time,end_time):
"对找到的数据进行处理"
wirte_file('search_ls.txt',find_all)
print('*'*50)
print("查找共用了{}分{:2f}秒。".format((end_time-start_time)//60,(end_time-start_time)%60))
print(f"找到文件并已存入到search_ls.txt中:")
for i in find_all:
print(i)
print('*'*50)
sure=input("是否删除文件(y/n)?")
if sure =="y":
for i in find_all:
try:
os.remove(i)
print("删除:{}".format(i))
except:
pass
def main():
"程序主函数"
keystr=['**来','**军','**才'] # 关键字不止这几个
falg=True
while falg:
start_time=time.time()
disk_ls=getdisk()
print(f'找到磁盘:{disk_ls}')
disk_all_search=input('是否进行全盘搜索(y)?')
find_all=[]
# 全盘检索
if disk_all_search=='y':
for disk in disk_ls:
searth_ls,error_ls=searth(disk,keystr)
find_all=find_all+searth_ls
# 独立磁盘或目录检查
else:
start_disk=input("请输入你要检查的磁盘(q退出):")
if start_disk=="q":
falg=False
searth_ls,error_ls=searth(start_disk,keystr)
find_all=searth_ls
end_time=time.time()
# 对找到的数据进行处理
if len(find_all)>0:
disproce_findall(find_all,start_time,end_time)
else:
print('*'*50)
print(f"没有找到相关文件")
if __name__=="__main__":
main()