文件列表与文件夹内文件对比,查找缺失文件的代码问题排查
问题排查与修复方案
原代码核心问题
- 逻辑判断顺序错误:内层循环只要遇到一个不包含当前前缀的文件就直接打印,会导致存在的前缀也被误报,同时同一个缺失前缀会被重复打印多次(次数等于目录下文件总数)
- 重复调用
os.walk效率低下:每次内层循环都会重新遍历一次目录,产生不必要的性能损耗 - 匹配逻辑不符合需求:你需要的是「前缀从未在任何目录文件名中出现」才判定为缺失,原逻辑是「只要有一个文件名不包含前缀就判定为缺失」,判定规则完全相反
修复后代码
import os # 目标目录路径 target_dir = r'C:\Users\foo\bar' # 待检查的前缀列表 check_list = ['FOO_BAR_524B_023D9B01_2021-157T05-34-31__00001', 'dfiknvbdjfhnv'] # 先一次性读取目录下所有文件名 dir_files = next(os.walk(target_dir))[2] for prefix in check_list: # 遍历所有目录文件,判断是否有任意一个文件包含当前前缀 exists = any(prefix in file_name for file_name in dir_files) # 只有不存在的时候才打印 if not exists: print(prefix)
逻辑说明
- 先一次性读取目录下所有文件名到变量
dir_files中,避免重复遍历目录 - 对每个待检查的前缀,用
any()函数判断是否有任意一个目录文件名包含该前缀,只要有一个匹配就判定为存在 - 仅当前缀在所有目录文件名中都未匹配到的时候,才判定为缺失并输出
内容的提问来源于stack exchange,提问作者stickmann
相关产品推荐
相关产品推荐

