You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现验证目录指定前缀文件是否存在的Python函数?

实现文件前缀验证函数 validate(path, name_list)

需求说明

需要编写一个Python函数,接收目录路径和预期文件名前缀列表,返回目录中缺失的前缀(忽略大小写,文件名可带任意后缀)。例如给定列表['daily', 'bills', 'costs', 'names', 'ids'],目录中有Daily_tue.xlsx、BILLS_26.05.2023.xlsx、Costs.xlsx时,返回['names', 'ids']。

实现思路

  1. 遍历目标目录,只处理文件(排除子目录)
  2. 对每个文件提取有效前缀:
    • 去掉文件路径,只保留文件名
    • 移除文件后缀(处理含多个点的文件名)
    • 提取第一个下划线前的内容作为前缀(无下划线则用无后缀的文件名)
    • 转成小写,统一匹配规则
  3. 对比预期前缀列表,筛选出未在目录中出现的前缀

代码实现

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:23:23