核心方法:使用 os 模块
os 模块提供了与操作系统交互的功能,删除文件主要使用 os.remove() 函数。

(图片来源网络,侵删)
基本用法
os.remove() 会删除指定的文件。
前提条件:
- 你必须拥有该文件的写入权限。
- 路径指向的必须是一个文件,如果是一个目录,会抛出
IsADirectoryError。
import os
# 定义要删除的文件路径
# 使用绝对路径或相对路径都可以
file_path = 'my_test_file.txt'
# 检查文件是否存在,这是一个好习惯
if os.path.exists(file_path):
try:
# 删除文件
os.remove(file_path)
print(f"文件 '{file_path}' 已成功删除。")
except OSError as e:
print(f"删除文件时出错: {e}")
else:
print(f"文件 '{file_path}' 不存在。")
错误处理(非常重要)
直接使用 os.remove() 是危险的,如果文件不存在、路径错误或没有权限,程序会崩溃。必须使用 try...except 块来处理可能发生的异常。
常见的异常包括:
FileNotFoundError: 文件不存在。PermissionError: 没有删除文件的权限。IsADirectoryError: 路径指向的是一个目录,而不是文件。
import os
file_path = 'a_file_that_does_not_exist.txt'
try:
os.remove(file_path)
print(f"文件 '{file_path}' 已成功删除。")
except FileNotFoundError:
print(f"错误: 文件 '{file_path}' 未找到。")
except PermissionError:
print(f"错误: 没有权限删除文件 '{file_path}'。")
except IsADirectoryError:
print(f"错误: '{file_path}' 是一个目录,请使用 os.rmdir() 或 shutil.rmtree() 来删除它。")
except Exception as e:
print(f"发生未知错误: {e}")
进阶方法:使用 shutil 模块
shutil 模块提供了一系列高级的文件和文件夹操作功能,虽然 shutil 主要用于文件夹,但它也提供了一个删除文件的函数。
shutil.unlink()
shutil.unlink() 是 os.remove() 的一个别名,功能完全相同,名字 "unlink" 源自于 Unix/Linux 系统中删除文件链接的命令。
import shutil
file_path = 'another_file.txt'
if os.path.exists(file_path):
try:
shutil.unlink(file_path)
print(f"文件 '{file_path}' 已成功删除。")
except OSError as e:
print(f"删除文件时出错: {e}")
else:
print(f"文件 '{file_path}' 不存在。")
为什么会有两个功能相同的函数?
os.remove()更直接,语义更清晰(就是删除)。shutil模块中还包含shutil.rmtree()用于递归删除目录,unlink作为remove的别名,在功能上形成了一种对应关系(rmdir/unlinkvsrmtree)。
如何删除文件夹?
这是一个非常相关且重要的问题,删除文件夹和删除文件使用的函数不同,因为文件夹可能包含子文件和子文件夹。
删除空文件夹:os.rmdir()
这个函数只能删除空文件夹,如果文件夹不为空,会抛出 OSError。
import os
empty_dir_path = 'my_empty_folder'
try:
os.rmdir(empty_dir_path)
print(f"空文件夹 '{empty_dir_path}' 已成功删除。")
except OSError as e:
print(f"删除空文件夹时出错: {e}")
删除非空文件夹(及其所有内容):shutil.rmtree()
这是最常用、最强大的方法,可以递归地删除一个文件夹以及它内部的所有文件和子文件夹。
import shutil
non_empty_dir_path = 'my_folder_with_files'
try:
shutil.rmtree(non_empty_dir_path)
print(f"文件夹 '{non_empty_dir_path}' 及其所有内容已成功删除。")
except OSError as e:
print(f"删除文件夹时出错: {e}")
| 任务 | 推荐函数 | 模块 | 关键点 |
|---|---|---|---|
| 删除单个文件 | os.remove() |
os |
必须配合 try...except 使用,处理 FileNotFoundError 等异常。 |
| 删除单个文件 | shutil.unlink() |
shutil |
os.remove() 的别名,功能相同。 |
| 删除空文件夹 | os.rmdir() |
os |
只能用于空文件夹,否则会报错。 |
| 删除非空文件夹 | shutil.rmtree() |
shutil |
强烈推荐,可以安全地删除整个目录树。 |
| 安全地删除文件 | pathlib.Path.unlink() |
pathlib |
现代Python(3.4+)推荐的方式,面向对象,更优雅。 |
现代Python推荐方式:pathlib 模块
pathlib 是自 Python 3.4 引入的模块,它使用面向对象的方式来处理文件系统路径,代码更简洁、更易读。
from pathlib import Path
# 创建一个 Path 对象
file_to_delete = Path('my_test_file.txt')
# 检查文件是否存在
if file_to_delete.exists():
try:
# 使用 .unlink() 方法删除文件
file_to_delete.unlink()
print(f"文件 '{file_to_delete}' 已成功删除。")
except OSError as e:
print(f"删除文件时出错: {e}")
else:
print(f"文件 '{file_to_delete}' 不存在。")
删除文件夹同样简单:
from pathlib import Path
dir_to_delete = Path('my_folder_with_files')
if dir_to_delete.exists():
try:
# 使用 .rmdir() 删除空目录
# dir_to_delete.rmdir() # 如果目录非空,会报错
# 使用 shutil.rmtree() 删除非空目录
# shutil.rmtree(dir_to_delete) # 需要先导入 shutil
# 或者使用 pathlib 2.0+ 的 Path.rmdir() (Python 3.12+ 开始支持递归删除)
# dir_to_delete.rmdir(recursive=True) # 需要较新版本的Python
# 为了兼容性,通常还是推荐混用
import shutil
shutil.rmtree(dir_to_delete)
print(f"文件夹 '{dir_to_delete}' 及其所有内容已成功删除。")
except OSError as e:
print(f"删除文件夹时出错: {e}")
- 删除文件:使用
os.remove()或shutil.unlink(),并务必进行错误处理。 - 删除文件夹:
- 如果是空的,用
os.rmdir()。 - 如果非空,用
shutil.rmtree()。
- 如果是空的,用
- 现代首选:对于新项目,强烈推荐使用
pathlib模块,它能让你的文件操作代码更清晰、更 Pythonic。
