使用 shutil 模块(推荐)
这是最推荐的方法,因为它代码简洁、可读性强,并且能很好地处理各种边界情况(如文件权限、符号链接等)。

shutil.rmtree() 用于删除一个目录以及其下的所有内容(文件和子目录),os.mkdir() 或 Path.mkdir() 用来重新创建一个空的目录。
代码示例
import shutil
import os
# 定义要清空的文件夹路径
folder_path = 'my_folder'
# 1. 检查文件夹是否存在
if os.path.exists(folder_path):
try:
# 2. 删除整个文件夹及其所有内容
shutil.rmtree(folder_path)
# 3. 重新创建一个空的文件夹
os.mkdir(folder_path)
print(f"文件夹 '{folder_path}' 已成功清空!")
except OSError as e:
print(f"删除文件夹时出错: {e}")
else:
print(f"文件夹 '{folder_path}' 不存在。")
使用 pathlib 模块 (Python 3.4+) 的现代写法:
pathlib 是 Python 官方推荐的面向对象的路径操作库,代码更优雅。
from pathlib import Path
# 定义要清空的文件夹路径
folder_path = Path('my_folder')
# 1. 检查文件夹是否存在
if folder_path.exists():
try:
# 2. 删除整个文件夹及其所有内容
folder_path.rmdir() # 注意:rmdir() 只能删除空目录,所以这里不适用
# 正确的做法是使用 shutil.rmtree
shutil.rmtree(folder_path)
# 3. 重新创建一个空的文件夹
folder_path.mkdir()
print(f"文件夹 '{folder_path}' 已成功清空!")
except OSError as e:
print(f"删除文件夹时出错: {e}")
else:
print(f"文件夹 '{folder_path}' 不存在。")
shutil.rmtree + pathlib.mkdir 的最佳实践:

import shutil
from pathlib import Path
folder_path = Path('my_folder')
if folder_path.is_dir(): # 使用 is_dir() 更精确地检查
shutil.rmtree(folder_path)
folder_path.mkdir() # mkdir() 默认会创建一个空目录
print(f"文件夹 '{folder_path}' 已成功清空!")
else:
print(f"路径 '{folder_path}' 不是一个文件夹或不存在。")
使用 os 模块遍历并删除
这种方法更底层,需要自己编写循环来遍历和删除,它可以帮助你理解底层发生了什么,但代码稍显复杂。
代码示例
import os
folder_path = 'my_folder'
# 1. 检查文件夹是否存在
if not os.path.isdir(folder_path):
print(f"文件夹 '{folder_path}' 不存在或不是一个目录。")
exit()
# 2. 遍历文件夹中的所有文件和子目录
for filename in os.listdir(folder_path):
# 构建完整的文件路径
file_path = os.path.join(folder_path, filename)
try:
# 3. 检查是文件还是目录
if os.path.isfile(file_path) or os.path.islink(file_path):
# 删除文件
os.unlink(file_path)
print(f"已删除文件: {file_path}")
elif os.path.isdir(file_path):
# 如果是子目录,递归调用自身来清空
# 注意:这里直接调用自己会删除子目录下的所有内容,但不会删除子目录本身
# 如果想连子目录也删掉,应该用 os.rmdir(file_path),但前提是它必须是空的
# 为了彻底清空,最好递归调用一个清空函数
pass # 这里不处理递归,只处理当前目录
except Exception as e:
print(f"删除 {file_path} 时出错: {e}")
print(f"文件夹 '{folder_path}' 下的所有文件已删除。")
注意:上面的 os 模块示例只删除了当前目录下的文件和链接,并没有处理子目录,如果要递归删除所有子目录和文件,需要更复杂的逻辑,这通常会让代码变得臃肿。除非有特殊需求,否则强烈推荐使用 shutil.rmtree()。
使用 pathlib 模块遍历并删除
这是 os 模块方法的现代 pathlib 版本,同样需要循环,但代码更清晰。
代码示例
from pathlib import Path
folder_path = Path('my_folder')
# 1. 检查路径是否存在并且是一个目录
if not folder_path.is_dir():
print(f"路径 '{folder_path}' 不是一个文件夹或不存在。")
exit()
# 2. 遍历目录下的所有内容
for item in folder_path.iterdir():
try:
# 3. 删除文件或目录
# item.unlink() 用于删除文件或符号链接
# item.rmdir() 用于删除空目录
# 如果要删除非空目录,需要递归
if item.is_file() or item.is_symlink():
item.unlink()
print(f"已删除: {item}")
elif item.is_dir():
# 递归删除子目录及其内容
# shutil.rmtree 是最简单的方式
shutil.rmtree(item)
print(f"已删除目录: {item}")
except Exception as e:
print(f"删除 {item} 时出错: {e}")
print(f"文件夹 '{folder_path}' 下的所有内容已删除。")
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
shutil.rmtree() + os.mkdir() |
代码最简洁、可读性高、最可靠 | 需要两步操作(删除整个目录,再重建) | 绝大多数情况下的首选,简单高效。 |
os 模块遍历 |
灵活性高,可以在删除前对每个文件进行检查或处理 | 代码复杂,容易出错,处理递归逻辑麻烦 | 需要在删除前对每个文件进行特殊操作时。 |
pathlib 模块遍历 |
代码比 os 模块更清晰、更面向对象 |
同样需要循环,逻辑比 shutil 复杂 |
倾向于使用 pathlib 进行所有路径操作,且需要在删除前进行文件处理时。 |
⚠️ 重要警告
删除文件是不可逆操作! 在运行任何删除脚本之前,请务必:
- 备份重要数据:确保你已经备份了文件夹中需要保留的文件。
- 仔细检查路径:在脚本中多次打印
folder_path变量的值,确认它指向的是你想要清空的文件夹,而不是系统关键目录(如C:\Windows或/etc)。 - 先在测试环境运行:先在一个不重要的文件夹上测试你的脚本,确保它能按预期工作。
一个更安全的做法:在删除前,先将要删除的文件列表打印出来,确认无误后再执行删除操作。
import shutil
from pathlib import Path
folder_path = Path('my_folder_to_delete')
if folder_path.is_dir():
# --- 安全检查:先列出将要删除的文件 ---
print("将要删除以下内容:")
for item in folder_path.rglob('*'): # rg('*') 递归查找所有文件和目录
print(f" - {item}")
# --- 确认操作 ---
confirm = input("\n确认要删除以上所有内容吗?(y/n): ")
if confirm.lower() == 'y':
shutil.rmtree(folder_path)
print("删除完成。")
else:
print("操作已取消。")
else:
print(f"文件夹 '{folder_path}' 不存在。") 