引子

近日,单位应上级要求清理一批文件,关键字这里就不写了。所有职工都要进行清理,通过口头转述自行清理,但是领导不放心要求每个人的电脑再查看一看,是否清理干净。如果通知windows内置的搜索,输入关键是都是一大片,非常麻烦。又因学习了一段时间的python,所以起了用python遍历全盘查找文件的心思。

完整代码,高手勿喷

  1. import os
  2. import subprocess
  3. import sys
  4. import time
  5. def searth(path,keys):
  6. "对path中的关键字进行查找"
  7. searth_ls=[]
  8. error=[]
  9. try:
  10. for root, dirnames,files in os.walk(path,topdown=False):
  11. if root.count(r"C:\Windows")>0:
  12. continue
  13. print(root)
  14. for name in files:
  15. for key in keys:
  16. if key in name:
  17. # print(os.path.join(root,name))
  18. searth_ls.append(os.path.join(root,name))
  19. except Exception as e:
  20. print("error:{}".format(e))
  21. error.append(e)
  22. return searth_ls, error
  23. def getdisk():
  24. "获取盘符"
  25. disk_ls=[]
  26. for i in range(65,91):
  27. vol = chr(i) + ':\\'
  28. if os.path.isdir(vol):
  29. disk_ls.append(vol)
  30. return disk_ls
  31. def wirte_file(name,ls):
  32. "把ls列表写入到name文件中"
  33. f=open(name,'w',encoding='utf-8')
  34. f.write("\n".join(ls))
  35. f.close()
  36. def disproce_findall(find_all,start_time,end_time):
  37. "对找到的数据进行处理"
  38. wirte_file('search_ls.txt',find_all)
  39. print('*'*50)
  40. print("查找共用了{}分{:2f}秒。".format((end_time-start_time)//60,(end_time-start_time)%60))
  41. print(f"找到文件并已存入到search_ls.txt中:")
  42. for i in find_all:
  43. print(i)
  44. print('*'*50)
  45. sure=input("是否删除文件(y/n)?")
  46. if sure =="y":
  47. for i in find_all:
  48. try:
  49. os.remove(i)
  50. print("删除:{}".format(i))
  51. except:
  52. pass
  53. def main():
  54. "程序主函数"
  55. keystr=['**来','**军','**才'] # 关键字不止这几个
  56. falg=True
  57. while falg:
  58. start_time=time.time()
  59. disk_ls=getdisk()
  60. print(f'找到磁盘:{disk_ls}')
  61. disk_all_search=input('是否进行全盘搜索(y)?')
  62. find_all=[]
  63. # 全盘检索
  64. if disk_all_search=='y':
  65. for disk in disk_ls:
  66. searth_ls,error_ls=searth(disk,keystr)
  67. find_all=find_all+searth_ls
  68. # 独立磁盘或目录检查
  69. else:
  70. start_disk=input("请输入你要检查的磁盘(q退出):")
  71. if start_disk=="q":
  72. falg=False
  73. searth_ls,error_ls=searth(start_disk,keystr)
  74. find_all=searth_ls
  75. end_time=time.time()
  76. # 对找到的数据进行处理
  77. if len(find_all)>0:
  78. disproce_findall(find_all,start_time,end_time)
  79. else:
  80. print('*'*50)
  81. print(f"没有找到相关文件")
  82. if __name__=="__main__":
  83. main()