如何实现验证目录指定前缀文件是否存在的Python函数?
实现文件前缀验证函数
validate(path, name_list) 需求说明
需要编写一个Python函数,接收目录路径和预期文件名前缀列表,返回目录中缺失的前缀(忽略大小写,文件名可带任意后缀)。例如给定列表['daily', 'bills', 'costs', 'names', 'ids'],目录中有Daily_tue.xlsx、BILLS_26.05.2023.xlsx、Costs.xlsx时,返回['names', 'ids']。
实现思路
- 遍历目标目录,只处理文件(排除子目录)
- 对每个文件提取有效前缀:
- 去掉文件路径,只保留文件名
- 移除文件后缀(处理含多个点的文件名)
- 提取第一个下划线前的内容作为前缀(无下划线则用无后缀的文件名)
- 转成小写,统一匹配规则
- 对比预期前缀列表,筛选出未在目录中出现的前缀
代码实现
import os def validate(path, name_list): existing_prefixes = set() for entry in os.scandir(path): if entry.is_file(): # 获取纯文件名 filename = entry.name # 移除后缀(保留最后一个点之前的所有内容) name_no_ext = filename.rsplit('.', 1)[0] if '.' in filename else filename # 提取前缀(第一个下划线前的部分) prefix = name_no_ext.split('_', 1)[0] # 转小写存入集合去重 existing_prefixes.add(prefix.lower()) # 找出缺失的前缀 missing_prefixes = [name for name in name_list if name.lower() not in existing_prefixes] return missing_prefixes
测试示例
# 预期前缀列表 my_names_list = ['daily', 'bills', 'costs', 'names', 'ids'] # 替换为你的目标目录路径 target_dir = '/your/target/directory/path' # 调用函数 result = validate(target_dir, my_names_list) print(result) # 输出: ['names', 'ids']
关键细节说明
- 用
os.scandir遍历目录,比传统os.listdir更高效,可直接判断条目是否为文件 rsplit('.', 1)确保正确处理含多个点的文件名(如report.v3.pdf会提取report.v3作为无后缀名)split('_', 1)只分割第一个下划线,避免后续下划线干扰前缀判断- 统一转小写实现大小写不敏感匹配,符合需求中的
Daily匹配daily场景 - 使用集合存储已存在的前缀,提升查找效率
内容的提问来源于stack exchange,提问作者MDJ
相关产品推荐
相关产品推荐

