Python glob递归遍历目录并计算MD5时递归失效问题求助
问题根因
- 核心错误:
return dirs语句放置在for循环内部,第一次遍历到第一个文件完成MD5计算后就会直接返回结果,不会执行后续遍历逻辑,所以看起来像是递归失效。 - 匹配规则问题:你使用的
**/*.*匹配规则只会筛选名称带.的文件,无后缀的文件、纯目录都会被过滤,若需遍历所有文件,要调整为**/*。 - 潜在异常风险:
glob.iglob开启递归后会返回目录路径,直接对目录执行open()操作会触发报错,需要增加文件类型判断过滤目录。
修复后可正常运行的代码
import glob import hashlib import os def get_original_dir(target_dir): dirs = ['File,Md5!'] # 调整匹配规则覆盖所有路径 files = glob.iglob(f"{target_dir}/**/*", recursive=True) for file in files: # 仅处理文件,跳过目录 if not os.path.isfile(file): continue with open(file, "rb") as f: file_hash = hashlib.md5() while chunk := f.read(8192): file_hash.update(chunk) dirs.append(f"{file},{file_hash.hexdigest()}!") # 所有遍历完成后再返回结果 return dirs
内容的提问来源于stack exchange,提问作者Kyle Sponable
相关产品推荐
相关产品推荐

