Python 批量清空文件夹:删除内容保留文件夹本身
用 Python 清空指定文件夹内所有文件和子文件夹,但保留文件夹本身,适合清理临时目录、缓存目录、输出目录,附 dry-run 与备份提醒。
场景痛点
脚本每次跑都会往 output/ 目录吐一堆中间文件,下次跑前要手动把里面全删了;或者临时下载目录想一键清空但保留这个文件夹本身。手动全选删除还得处理「文件被占用」的弹窗,一个一个点。用 Python 遍历目录把里面的文件和子文件夹都删掉,文件夹本身留着,下次直接往里写新内容。
用到的库
纯标准库,无需 pip 安装:
# os、shutil 为标准库
完整代码
import os
import shutil
# ========== 配置区 ==========
TARGET_DIR = "./output" # 要清空的文件夹(本身保留,只删内容)
DRY_RUN = True
# 安全保险:路径必须包含这个关键词才允许真删,防止指错目录
SAFE_KEYWORD = "output"
# ============================
def main():
if not os.path.isdir(TARGET_DIR):
print(f"目录不存在:{TARGET_DIR}")
return
# 安全检查:路径里必须含 SAFE_KEYWORD,避免误删其他目录
if SAFE_KEYWORD not in os.path.abspath(TARGET_DIR):
print(f"[拒绝] 路径 {TARGET_DIR} 不含 '{SAFE_KEYWORD}',已停止。")
print("怕的是你把 TARGET_DIR 指到桌面、C盘这种地方,整个被清空。")
return
removed_files = 0
removed_dirs = 0
for entry in os.listdir(TARGET_DIR):
path = os.path.join(TARGET_DIR, entry)
if os.path.isfile(path) or os.path.islink(path):
print(f"[{'预览删文件' if DRY_RUN else '删文件'}] {path}")
if not DRY_RUN:
os.remove(path)
removed_files += 1
elif os.path.isdir(path):
print(f"[{'预览删目录' if DRY_RUN else '删目录'}] {path}")
if not DRY_RUN:
shutil.rmtree(path)
removed_dirs += 1
print(f"\n将删除 {removed_files} 个文件、{removed_dirs} 个子目录(DRY_RUN={DRY_RUN})")
if DRY_RUN:
print("只是预览。确认这个目录就是你想清空的,再把 DRY_RUN 改成 False。")
if __name__ == "__main__":
main()
代码讲解
- 只删内容不删根目录:遍历的是
TARGET_DIR下的条目,把每个文件/子目录分别删掉,TARGET_DIR本身不参与删除,清空后文件夹还在。 - SAFE_KEYWORD 安全闸:在真删之前检查绝对路径里有没有
output这个关键词。这是防手滑的关键——万一你把 TARGET_DIR 写成C:\Users\xxx\Desktop,脚本会拒绝执行,不会把桌面清空。 - 文件用 os.remove,目录用 shutil.rmtree:
rmtree递归删整个子目录树。如果目录里有大量文件,比一个个 os.remove 快。 - 符号链接单独处理:
islink判断软链接,软链接用os.remove删链接本身,不会顺着链接把目标文件删了。
运行结果
第一次运行列出将要删除的所有文件和子目录,并通过安全闸检查。确认无误把 DRY_RUN 改成 False 再跑,目录被清空但文件夹还在,下次写脚本直接往里写就行。
注意事项
- 清空≠移动到回收站:
os.remove和rmtree都是永久删除,删了找不回。重要内容先备份。 - SAFE_KEYWORD 是保命设计:把它改成你项目里特定的目录名,比如
tmp、cache,让脚本只在这些目录里真删。 - 文件被占用会报错:Windows 下某个文件正被程序打开,
os.remove会抛 PermissionError。把占用程序关掉再跑。 - 别对系统目录用:本脚本危险,只对自己项目里的临时/输出目录用。
- 想保留空目录结构:本脚本是全清空;想保留空架子、只删文件内容,把
rmtree那段改成递归删文件即可。

更新时间:2026-09-14 21:29:56
上一篇:Python 批量复制文件并重命名:留底+规范命名一步做