如何用Python归档超过30天的旧文件夹?当前仅支持单文件归档
实现归档/清理超过30天的旧文件夹
针对你原来只能处理单个归档文件的代码,我改写成了批量处理过期文件夹的版本,直接用文件夹的实际修改/创建时间判断,比从文件名提取日期靠谱得多。
修改后的完整代码
import os import shutil from datetime import datetime, timedelta # 配置参数,自行替换路径和天数 target_folder = 'PATH' # 要处理的目标文件夹路径 archive_folder = 'ARCHIVE_PATH' # 归档文件夹路径,会自动创建 archive_period_days = 30 # 超过此天数的文件夹将被归档 # 确保归档文件夹存在,不存在则自动创建 os.makedirs(archive_folder, exist_ok=True) # 计算时间阈值:当前时间往前推30天 threshold_time = datetime.now() - timedelta(days=archive_period_days) # 高效遍历目标文件夹内的所有条目 with os.scandir(target_folder) as entries: for entry in entries: # 仅处理文件夹,跳过文件 if entry.is_dir(follow_symlinks=False): try: # 获取文件夹最后修改时间(需用创建时间则替换为entry.stat().st_ctime) folder_mod_time = datetime.fromtimestamp(entry.stat().st_mtime) # 判断是否超过归档周期 if folder_mod_time < threshold_time: src_path = entry.path dest_path = os.path.join(archive_folder, entry.name) # 移动文件夹到归档目录(如需直接删除,替换为shutil.rmtree(src_path)) shutil.move(src_path, dest_path) print(f"已归档:{src_path} → {dest_path}") except Exception as e: print(f"处理文件夹 {entry.name} 时出错:{str(e)}")
关键说明
- 高效遍历:用
os.scandir替代os.listdir,无需额外调用os.stat获取文件属性,速度更快 - 时间判断:依赖系统记录的文件夹修改时间(
st_mtime),比从文件名拆分日期更准确——毕竟文件名可手动修改,系统时间不会随意变动 - 归档/删除可选:代码默认将过期文件夹移动到归档目录,若无需保留归档,直接把
shutil.move替换为shutil.rmtree(src_path)即可(注意:rmtree会彻底删除文件夹及内部所有内容,操作前请确认) - 异常防护:加入
try-except捕获错误,避免因权限不足、文件夹被占用等问题导致程序崩溃
顺带修复原代码的问题
- 原代码未定义
dir变量,已替换为配置的folder路径 - 原用
split('.')拆分文件名,碰到含.的文件名会报错,现在直接针对文件夹处理无需拆分 - 原正则仅匹配
.txt文件,完全不适用于文件夹场景,现在直接通过is_dir判断目录类型
内容的提问来源于stack exchange,提问作者jun long
相关产品推荐
相关产品推荐

