Python清理临时文件过期文件:按天数自动删除旧文件
用Python扫描目录删除超过指定天数的临时文件和过期文件,支持按后缀过滤、先预览后删除,安全清理磁盘空间。
场景痛点
下载目录、日志目录、临时输出目录用久了塞满几个月前的旧文件,占磁盘空间还找不到有用的东西。手动按修改时间排序再删,几百个文件点到手软,还怕误删重要文件。用Python脚本按天数过滤,先打印将要删除的文件清单确认,再执行删除。
用到的库
pathlib # 标准库
datetime # 标准库,时间计算
完整代码
import time
from pathlib import Path
from datetime import datetime, timedelta
def clean_old_files(
dir_path: str,
days: int = 30,
suffix_filter: list = None,
dry_run: bool = True
) -> dict:
"""
删除目录下超过指定天数的文件
:param dir_path: 要清理的目录
:param days: 保留天数,超过则删除
:param suffix_filter: 只清理指定后缀,如 ['.tmp', '.log'];None清理全部
:param dry_run: True只预览不删除,False才真正删除
"""
root = Path(dir_path)
cutoff = time.time() - days * 86400 # 86400秒=1天
suffix_filter = [s.lower() for s in (suffix_filter or [])]
stats = {"deleted": 0, "skipped": 0, "freed_bytes": 0}
for file in root.rglob('*'):
if not file.is_file():
continue
# 后缀过滤
if suffix_filter and file.suffix.lower() not in suffix_filter:
continue
# 修改时间判断
mtime = file.stat().st_mtime
if mtime >= cutoff:
stats["skipped"] += 1
continue
size = file.stat().st_size
mtime_str = datetime.fromtimestamp(mtime).strftime('%Y-%m-%d')
print(f"[{'预览' if dry_run else '删除'}] {file} ({size/1024:.1f}KB, 修改于{mtime_str})")
if not dry_run:
try:
file.unlink()
stats["deleted"] += 1
stats["freed_bytes"] += size
except Exception as e:
print(f" 删除失败: {e}")
print(f"\n{'预览' if dry_run else '清理'}完成:")
print(f" 将删除/已删除: {stats['deleted']} 个")
print(f" 跳过(未过期): {stats['skipped']} 个")
if not dry_run:
print(f" 释放空间: {stats['freed_bytes']/1024/1024:.2f} MB")
return stats
if __name__ == "__main__":
# 先 dry_run=True 预览将要删除的文件
clean_old_files(
dir_path="./temp",
days=30,
suffix_filter=['.tmp', '.log', '.bak'],
dry_run=True
)
# 确认无误后改成 dry_run=False 执行真正删除
代码讲解
cutoff = time.time() - days * 86400:计算截止时间戳。当前时间减去N天的秒数(一天86400秒),早于这个时间的文件就是过期文件。file.stat().st_mtime:文件最后修改时间。脚本把它和cutoff比较,小于cutoff说明过期。dry_run=True:默认只预览不删除,打印每个将要删除的文件路径和大小。确认清单没问题后改成False才真正unlink删除。这是防止误删的关键设计。file.unlink():删除单个文件。删除目录用rmdir(),但空目录才可以删;非空目录需要shutil.rmtree()。suffix_filter:限制只清理.tmp、.log这类临时文件,避免误删其他重要文件。
运行结果
预览模式下,脚本打印所有超过30天的.tmp/.log/.bak文件路径和大小:
[预览] temp/旧日志.log (152.3KB, 修改于2026-07-10)
[预览] temp/备份.bak (2048.0KB, 修改于2026-06-22)
预览完成:
将删除/已删除: 2 个
跳过(未过期): 5 个
把dry_run改成False再跑一次,真正删除并统计释放空间。
注意事项
- 一定要先dry_run预览。脚本删错文件回收站都找不回来,预览确认清单是底线。
rglob('*')会递归所有子目录。如果只想清理当前层,换成iterdir()。- 正在被程序占用的文件删除会失败(Windows尤其明显),脚本捕获异常继续处理下一个,不影响整体。
- 系统目录(如Windows的
C:\Windows\Temp)需要管理员权限,普通用户跑会报PermissionError,建议只清理自己业务目录。

更新时间:2026-09-14 21:24:05
上一篇:Python对比两个文件夹差异:一键找出新增删除修改文件