杰瑞科技汇

Python文件如何正确删除?

核心方法:使用 os 模块

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

Python文件如何正确删除?-图1
(图片来源网络,侵删)

基本用法

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/unlink vs rmtree)。

如何删除文件夹?

这是一个非常相关且重要的问题,删除文件夹和删除文件使用的函数不同,因为文件夹可能包含子文件和子文件夹。

删除空文件夹: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。
分享:
扫描分享到社交APP
上一篇
下一篇