如何用Python遍历目录及子目录获取所有文件的MD5哈希值
代码调整方案
- 替换原有
glob.glob写法:添加**通配符匹配所有层级路径,开启recursive=True参数实现递归遍历所有子目录 - 新增文件类型判断:递归遍历会返回目录路径,调用
os.path.isfile()过滤仅保留文件,避免打开目录时报错 - 优化性能细节:将单次文件的MD5计算结果存为变量,避免重复计算两次;用
with上下文管理器打开病毒库文件,自动处理资源关闭
修改后完整代码如下:
import hashlib import glob import os.path # 开启递归遍历所有子目录 filenames = glob.glob('C:/Users/User/Desktop/irustesting/**/*', recursive=True) def md5(fname): hash_md5 = hashlib.md5() with open(fname, "rb") as f: for chunk in iter(lambda: f.read(2 ** 20), b""): hash_md5.update(chunk) return hash_md5.hexdigest() # 用with上下文管理器自动关闭文件 with open('C:/FYP/SecuCOM2022/viruslist.txt','rt') as viruslist: virusinside = [l.rstrip() for l in viruslist] virus="detected" novirus="clear" for filename in filenames: # 过滤仅处理文件,跳过目录 if not os.path.isfile(filename): continue # 仅计算一次MD5,复用结果 current_md5 = md5(filename) print(filename, current_md5) if current_md5 in virusinside: print(virus) os.remove(filename) else: print(novirus)
内容的提问来源于stack exchange,提问作者Jun Jie Ong
相关产品推荐
相关产品推荐

