在 Python 中删除文件和目录

本教程介绍了如何使用 Python 内置的 ospathlib 以及 shutil 模块中的函数删除文件和目录。

删除文件

在 Python 中你可以使用 os.remove()os.unlink()pathlib.Path.unlink() 删除一个文件。

os 模块提供了一种与操作系统交互的简便方法。该模块在 Python 2 和 3 中都可使用。

要使用 os.remove() 删除单个文件,请将文件路径作为参数传递:

import os

file_path = '/tmp/file.txt'
os.remove(file_path)

os.remove()os.unlink() 功能在语义上是相同的:

import os

file_path = '/tmp/file.txt'
os.unlink(file_path)

如果指定的文件不存在则会抛出一个 FileNotFoundError 错误。 os.remove()os.unlink() 只能删除文件,不能删除目录。如果给定的路径指向目录,则将引发 IsADirectoryError 错误。

删除文件需要在包含文件的目录上具有写和执行权限。否则,您将获得 PermissionError 错误。

为避免在删除文件时出错,您可以使用异常处理来捕获异常并发送适当的错误消息:

import os

file_path = '/tmp/file.txt'

try:
    os.remove(file_path)
except OSError as e:
    print("Error: %s : %s" % (file_path, e.strerror))

pathlib 模块在 Python 3.4 及更高版本中可用。如果要在 Python 2 中使用此模块,可以使用 pip 进行安装。 pathlib 提供了一个面向对象的接口,用于处理不同操作系统的文件系统路径。

要使用 pathlib 模块删除文件,请创建一个 Path 指向该文件的对象,然后在该对象上调用 unlink() 方法:

from pathlib import Path

file_path = Path('/tmp/file.txt')

try:
    file_path.unlink()
except OSError as e:
    print("Error: %s : %s" % (file_path, e.strerror))

pathlib.Path.unlink()os.remove()os.unlink() 也可以用来删除符号链接

模式匹配

您可以使用 glob 模块根据模式匹配多个文件。例如,要删除 /tmp 目录中的所有 .txt 文件,可以使用以下命令:

import os
import glob

files = glob.glob('/tmp/*.txt')

for f in files:
    try:
        f.unlink()
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

要递归删除 /tmp 目录及其下所有子目录中的所有 .txt 文件,请将 recursive=True 参数传递给 glob() 函数并使用**模式:

import os
import glob

files = glob.glob('/tmp/**/*.txt', recursive=True)

for f in files:
    try:
        os.remove(f)
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

pathlib 模块包含了两个 glob 函数在给定目录中匹配的文件: glob() 以及 rglob()glob() 仅匹配顶级目录中的文件。 rglob() 递归匹配目录和所有子目录中的所有文件。以下示例代码删除 /tmp 目录中的所有 .txt 文件:

from pathlib import Path

for f in Path('/tmp').glob('*.txt'):
    try:
        f.unlink()
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

删除目录(文件夹)

在 Python 中,您可以使用 os.rmdir()pathlib.Path.rmdir() 删除空目录以及 shutil.rmtree() 删除非空目录。

以下示例显示如何删除空目录

import os

dir_path = '/tmp/img'

try:
    os.rmdir(dir_path)
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))

另外,您可以使用以下 pathlib 模块删除空目录

from pathlib import Path

dir_path = Path('/tmp/img')

try:
    dir_path.rmdir()
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))

shutil 模块使您可以对文件和目录执行许多高级操作。

使用此 shutil.rmtree() 功能,您可以删除给定目录和目录中的文件:

import shutil

dir_path = '/tmp/img'

try:
    shutil.rmtree(dir_path)
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))

传递给 shutil.rmtree() 的参数不能是指向目录的符号链接。

结论

Python 提供了几个用于处理文件的模块: ospathlib 以及 shutil

我们已经向您展示如何使用 os.remove()os.unlink()pathlib.Path.unlink() 删除一个文件,使用 os.rmdir()pathlib.Path.rmdir() 删除一个空目录,使用 shutil.rmtree() 递归删除目录和它的所有的内容。

删除文件或目录时要格外小心,因为一旦删除文件,就无法轻松恢复它。