遍历指定日期文件夹检测缺失文件的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
相关产品推荐
相关产品推荐

