使用Python查找子文件夹中名称含指定文本的最新Excel文件
现有代码错误说明
- 过滤逻辑完全失效:将整个文件路径列表强转为单个字符串做关键词判断是错误写法,只要列表中任意一个文件包含目标关键词,判断条件就会成立,后续
max()仍然会在全量xlsx文件范围内查找最新文件,根本无法过滤掉Backorder、Product available两类无关报告。 - 存在语法错误:Python依靠缩进划分代码块,原代码中
if判断下的max_file赋值行没有缩进,运行时会直接触发缩进语法报错;同时如果遍历后没有任何匹配关键词的文件,max_file变量不会被定义,后续读取文件的代码会直接抛出NameError异常。 - 缺少兜底逻辑:没有处理「未找到任何符合命名规则的文件」的边界场景,代码遇到该情况会直接崩溃,没有明确的错误提示。
- 匹配效率低:全量扫描路径下所有xlsx文件再做筛选,会产生很多无效遍历,完全可以在路径匹配阶段就加入关键词过滤减少开销。
- 存在冗余导入:原代码导入的csv、pathlib、re库在当前场景下没有任何实际作用,属于无效代码。
修正后代码
import pandas as pd import glob import os import sys # 替换为你实际存储报表的根目录路径,保留前缀r避免Windows路径转义问题 root_dir = r"替换为你的实际文件夹根路径" # 递归遍历所有子文件夹,直接匹配文件名包含Item Supply Demand的xlsx文件 matched_files = glob.glob(os.path.join(root_dir, "**", "*Item Supply Demand*.xlsx"), recursive=True) # 边界判断:没找到符合要求的文件时直接抛出提示并退出 if not matched_files: print("执行失败:指定路径下未找到任何Item Supply Demand类Excel报表") sys.exit(1) # 从筛选后的文件列表中,取创建时间最新的文件(Windows系统下os.path.getctime对应文件创建时间,适配每日下载新报表的场景) latest_report = max(matched_files, key=os.path.getctime) print(f"已定位最新物料供需报表:{latest_report}") # 读取文件到DataFrame df = pd.read_excel(latest_report) print(df)
补充说明
- 如果你需要按文件最后修改时间而非创建时间判断新旧,只需将
os.path.getctime替换为os.path.getmtime即可。 - 如果你需要对文件名做更复杂的规则校验(比如校验文件名里的日期格式是否合法),可以在拿到
matched_files列表后,遍历列表用正则做二次过滤,再取最新文件。
内容的提问来源于stack exchange,提问作者Kavish Sewmangal
相关产品推荐
相关产品推荐

