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

遍历指定日期文件夹检测缺失文件的Python实现求助

解决方案

首先修正原代码里的明显错误:你的路径拼接中把.json的文件模式额外加了.jpg后缀,这会导致匹配不到正确文件,先去掉这个错误。

针对“文件名包含可变序列号无法硬编码”的需求,我们可以通过通配符匹配指定日期的文件,并在检查到任意一类文件缺失时主动抛出异常。以下是实现代码:

import glob
import os

def check_daily_files(source_dir, target_date):
    # 定义需要检查的文件类型前缀(根据实际业务调整这部分)
    file_prefixes = ["file1", "file2", "file3", "file4"]  # 覆盖每日3-4个文件的情况
    missing_files = []

    # 遍历每个文件类型的通配符模式
    for prefix in file_prefixes:
        # 构造匹配模式:前缀_日期_任意序列号.json
        file_pattern = os.path.join(source_dir, f"{prefix}_{target_date}_*.json")
        # 递归查找匹配的文件
        matched_files = glob.glob(file_pattern, recursive=True)
        if not matched_files:
            missing_files.append(file_pattern)
    
    # 如果有缺失文件,抛出异常
    if missing_files:
        raise FileNotFoundError(f"以下文件类型缺失:{', '.join(missing_files)}")
    else:
        print(f"日期{target_date}的所有文件均存在")

# 使用示例
if __name__ == "__main__":
    source = "./"
    target_date = "20221102"  # 建议用字符串格式,避免数字处理的潜在问题
    try:
        check_daily_files(source, target_date)
    except FileNotFoundError as e:
        print(e)
        # 这里可以添加异常后的处理逻辑,比如终止程序或记录日志

关键说明:

  • 通配符匹配:用_*.json匹配可变序列号部分,不管序列号是数字还是字符串都能覆盖
  • 异常抛出:当检测到任意一类文件无匹配结果时,直接抛出FileNotFoundError,你也可以根据业务需求自定义异常类型
  • 灵活性:如果不需要固定前缀,仅需检查指定日期下的文件数量是否符合3-4个的要求,可以用下面的备选方案:
# 备选方案:不固定前缀,检查指定日期相关的json文件数量
def check_daily_file_count(source_dir, target_date):
    file_pattern = os.path.join(source_dir, f"*{target_date}*.json")
    matched_files = glob.glob(file_pattern, recursive=True)
    file_count = len(matched_files)
    if not (3 <= file_count <=4):
        raise ValueError(f"日期{target_date}的文件数量异常,当前为{file_count}个(预期3-4个)")
    else:
        print(f"日期{target_date}的文件数量符合要求,共{file_count}个")

内容的提问来源于stack exchange,提问作者unicorn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:05:23