如何使用Python删除文件名含指定日期之前的文件
问题解答
可行性结论
完全可行,只要能从文件名中提取出日期并与指定日期做数值比较,就能精准筛选并删除符合条件的文件。
当前代码的问题
你现有的代码仅会删除文件名中包含刚好35天前日期的文件,无法覆盖所有日期早于35天前的文件(比如36天、40天前的文件都会被遗漏),不符合你“删除所有早于指定日期文件”的核心需求。
修正后的代码
import os from datetime import datetime, timedelta user_id = 126155 target_dir = f"C:/Users/{user_id}/OneDrive/Onedrive - Anderson/" # 计算35天前的日期,转为datetime对象用于比较 cutoff_date = datetime.today() - timedelta(days=35) # 遍历目标目录下的所有文件 for filename in os.listdir(target_dir): # 仅处理CBD_0001_开头的文件 if filename.startswith('CBD_0001_'): # 提取文件名中的日期部分(兼容带后缀的文件,比如CBD_0001_01012024.txt) date_str = filename.split('_')[-1].split('.')[0] try: # 将日期字符串转为datetime对象 file_date = datetime.strptime(date_str, '%d%m%Y') # 若文件日期早于 cutoff_date,则执行删除 if file_date < cutoff_date: file_full_path = os.path.join(target_dir, filename) print(f"正在删除文件: {filename}") os.remove(file_full_path) except ValueError: # 跳过日期格式不符合要求的文件,避免程序崩溃 print(f"跳过格式异常文件: {filename}")
关键改进点
- 日期比较逻辑:不再仅匹配单一日期字符串,而是将文件名中的日期转为
datetime对象,直接和 cutoff 日期做大小比较,覆盖所有早于指定日期的文件。 - 完整路径处理:用
os.path.join拼接文件完整路径,避免因工作目录不一致导致的文件找不到问题。 - 异常容错:加入
try-except捕获日期格式错误的情况,防止程序中途终止。 - 变量可读性优化:将
id改为user_id,避免与内置函数重名,提升代码可维护性。
额外提示
- 测试阶段可先注释掉
os.remove(file_full_path),仅打印待删除文件,确认筛选逻辑无误后再执行删除操作。 - 若需指定固定日期(而非相对天数,比如早于2024年1月1日),可直接将
cutoff_date替换为datetime.strptime('01012024', '%d%m%Y')。
内容的提问来源于stack exchange,提问作者FireWolfBR
相关产品推荐
相关产品推荐

