Python 批量删除指定类型文件:清理缓存与垃圾文件
用 Python 批量删除指定类型文件,如 .tmp、.log、.bak、Thumbs.db,先列出待删清单确认,再统一删除,附回收站保护与 dry-run。
场景痛点
项目跑久了,文件夹里堆了一堆 .tmp 临时文件、.log 日志、.bak 备份、Thumbs.db 缩略图缓存,占空间还干扰视线。手动搜索删除不敢全选,怕误删有用文件。用 Python 按扩展名精确匹配,先把要删的文件全部列出来给你过目,确认后再统一删除,比在资源管理器里瞎选安全得多。
用到的库
纯标准库,无需 pip 安装:
# os 为标准库
完整代码
import os
# ========== 配置区 ==========
TARGET_DIR = "./项目目录"
DELETE_EXTS = [".tmp", ".bak", ".log", ".old"] # 要删除的扩展名
DELETE_NAMES = ["Thumbs.db", ".DS_Store"] # 要删除的固定文件名
DRY_RUN = True # True=只列清单,False=真删
RECURSIVE = True # 是否递归子文件夹
# ============================
def match(name: str) -> bool:
if name in DELETE_NAMES:
return True
ext = os.path.splitext(name)[1].lower()
return ext in DELETE_EXTS
def main():
if not os.path.isdir(TARGET_DIR):
print(f"目录不存在:{TARGET_DIR}")
return
to_delete = []
if RECURSIVE:
for dirpath, _, filenames in os.walk(TARGET_DIR):
for name in filenames:
if match(name):
to_delete.append(os.path.join(dirpath, name))
else:
for name in os.listdir(TARGET_DIR):
p = os.path.join(TARGET_DIR, name)
if os.path.isfile(p) and match(name):
to_delete.append(p)
print(f"待删除 {len(to_delete)} 个文件:")
total_size = 0
for p in to_delete:
size = os.path.getsize(p)
total_size += size
print(f" {p} ({size/1024:.1f} KB)")
print(f"\n共 {len(to_delete)} 个,{total_size/1024/1024:.2f} MB")
if not DRY_RUN:
for p in to_delete:
os.remove(p)
print("已删除。")
else:
print("当前是预览。确认清单无误后,把 DRY_RUN 改成 False 再跑一次。")
if __name__ == "__main__":
main()
代码讲解
- match 双条件:既按扩展名删(
.tmp、.log),也按固定文件名删(Thumbs.db、.DS_Store)。两种垃圾都能清。 - 先收集后删除:把所有匹配文件先放进
to_delete列表,打印出来连同大小一起给你看。看完清单再决定删不删,这比边遍历边删安全得多。 - 统计总大小:
os.path.getsize累加,告诉你这次清理能释放多少空间,删之前心里有数。 - RECURSIVE 开关:True 时用
os.walk递归子目录,适合清整个项目;False 只清当前层。 - os.remove:真正删除文件,不进回收站,直接从磁盘抹掉。
运行结果
第一次运行列出所有待删文件路径和总大小。人工核对没有误删后,把 DRY_RUN 改成 False 再跑一次,这些垃圾文件就被删掉,磁盘空间释放。
注意事项
- os.remove 不进回收站:删了就没了,别想后悔。重要项目先整个复制一份。
- dry-run 必须先跑:这是删除操作,预览清单是最后一道防线。发现匹配到不该删的文件,立刻调整 DELETE_EXTS。
- 别用通配符太宽:比如
.log可能命中你想留的日志文件。删之前看清单。 - 路径别选错:TARGET_DIR 指到系统目录(比如
C:\Windows)会把系统文件删掉,脚本只在自己项目目录跑。 - 回收站方案:想要"删到回收站"的效果,可装
send2trash库(pip install send2trash),把os.remove换成send2trash.send2trash(p),删除可恢复。

更新时间:2026-09-14 21:28:35