在 Python 中删除文件和目录
本教程介绍了如何使用 Python 内置的 os
, pathlib
以及 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 提供了几个用于处理文件的模块: os
, pathlib
以及 shutil
。
我们已经向您展示如何使用 os.remove()
, os.unlink()
, pathlib.Path.unlink()
删除一个文件,使用 os.rmdir()
和 pathlib.Path.rmdir()
删除一个空目录,使用 shutil.rmtree()
递归删除目录和它的所有的内容。
删除文件或目录时要格外小心,因为一旦删除文件,就无法轻松恢复它。