Python 中如何删除文件或文件夹?
Python 删除文件用 os.remove() 或 Path.unlink();删除空目录用 os.rmdir();递归删除整个目录树用 shutil.rmtree()。本文对比各方法及注意事项。
删文件:os.remove(path)(或 Path(path).unlink());删空目录:os.rmdir(path);删非空目录及其全部内容:shutil.rmtree(path)。删除操作不可恢复,执行前务必确认路径。
删除文件
import os
os.remove("/path/to/file.txt")
# pathlib 风格
from pathlib import Path
Path("/path/to/file.txt").unlink()
文件不存在会抛 FileNotFoundError,可以 Path.unlink(missing_ok=True)(3.8+)忽略。
删除空目录
os.rmdir("/path/to/folder")
# 或
Path("/path/to/folder").rmdir()
目录非空会抛 OSError。
递归删除整个目录树
import shutil
shutil.rmtree("/path/to/folder")
会连子目录和文件一起删掉,不可撤销,使用前建议打印路径确认。
各方法对比
| 方法 | 目标 | 非空时行为 |
|---|---|---|
os.remove() / Path.unlink() |
文件、符号链接 | 不适用 |
os.rmdir() / Path.rmdir() |
空目录 | 抛 OSError |
shutil.rmtree() |
实际目录树,顶层不能是指向目录的符号链接 | 递归删除内容 |
常见问题(FAQ)
Q:删除前想判断路径是文件还是目录?
A:这些检查默认跟随符号链接,且检查与删除之间可能发生变化;应明确链接处理策略并捕获实际删除异常。删除链接本身用 unlink,不应把顶层链接交给 rmtree。
Q:能删到回收站而不是彻底删除吗?
A:标准库不行,可以装第三方库 send2trash,在平台支持且操作成功时把文件移到回收站;仍可能失败,恢复取决于回收站保留状态,不能保证永久可恢复。
Q:删除时报 PermissionError?
A:通常是文件被其他进程占用(Windows 常见)或权限不足。先关闭占用文件的句柄,或检查运行权限。
[1]: 观测云文档《DataKit 文档》https://docs.guance.com/datakit/