Python如何基于日期自动匹配绝对路径下的CSV文件并导入
Python自动匹配固定命名规则下最新CSV文件实现
核心逻辑不需要反复修改文件名配置,只需要首次配置好固定的目录路径、文件名前缀后缀、日期匹配规则,后续运行会自动筛出目标文件、定位最新版本,同时可以直接对接旧文件清理逻辑。
实现代码
适配/home/Download/目录、固定前缀+变动日期+.csv后缀的命名场景,代码如下:
import os import re # 以下三个参数仅需首次配置,后续运行无需修改 TARGET_DIR = "/home/Download/" FIXED_PREFIX = "filename-" # 替换为你实际的固定文件名前缀 FIXED_SUFFIX = ".csv" # 正则匹配规则:默认适配8位年月日(YYYYMMDD)格式的日期段,其他日期格式修改对应正则即可 name_match_rule = re.compile(rf"^{re.escape(FIXED_PREFIX)}(\d{{8}}){re.escape(FIXED_SUFFIX)}$") def fetch_latest_target_csv(): valid_files = [] # 遍历目标目录下所有条目 for entry in os.listdir(TARGET_DIR): full_path = os.path.join(TARGET_DIR, entry) # 跳过子目录、软链等非普通文件 if not os.path.isfile(full_path): continue match_result = name_match_rule.match(entry) if match_result: # 提取文件名中的日期段,YYYYMMDD格式字符串的字典序和日期时序完全一致,可直接排序 date_segment = match_result.group(1) valid_files.append( (date_segment, entry, full_path) ) if not valid_files: raise FileNotFoundError("目标目录下未找到符合命名规则的CSV文件") # 按日期段倒序排列,第一条就是最新文件 valid_files.sort(reverse=True, key=lambda x: x[0]) return valid_files if __name__ == "__main__": file_list = fetch_latest_target_csv() latest_file = file_list[0] print(f"定位到最新目标文件:{latest_file[2]}") # 清理其余旧文件逻辑,确认匹配规则正确后再放开执行 # for _, _, old_file_path in file_list[1:]: # os.remove(old_file_path) # print(f"已清理冗余旧文件:{old_file_path}")
适配调整说明
- 如果你的文件名日期段不是8位纯数字格式,比如是
YYYY-MM-DD带横杠、或者YYMMDD短格式,只需要修改正则里括号内的日期匹配段即可。只要日期是补零的标准格式,字符串排序结果和日期先后顺序一致,不需要额外转时间对象,运行效率更高。 - 如果日期段存在不补零的不规范格式(比如
2024-5-3代表2024年5月3日),就把排序逻辑的key替换为datetime解析结果,导入datetime模块后将排序行改为valid_files.sort(reverse=True, key=lambda x: datetime.strptime(x[0], "%Y-%m-%d"))即可,日期格式字符串和你实际的日期段格式对应就行。 - 正则里用
re.escape()包裹固定前缀、后缀,是为了避免前缀里存在.、+这类正则特殊字符时匹配失效,不需要手动做转义处理。 - 第一次运行建议先注释掉文件删除逻辑,打印所有匹配到的文件列表,确认匹配规则没有误匹配、漏匹配之后,再放开清理逻辑避免误删文件。
内容的提问来源于stack exchange,提问作者Felipe Canio
相关产品推荐
相关产品推荐

