Python删除文件和目录
Python有一些内置模块,可让您删除文件和目录。本教程说明了如何使用os,pathlib和shutil模块中的功能删除文件和目录
Python有一些内置模块,可让您删除文件和目录。本教程说明了如何使用os,pathlib和shutil模块中的功能删除文件和目录。
在Python中,您可以使用os.remove(),os.unlink(),pathlib.Path.unlink()删除单个文件。os.remove()和os.unlink()函数在语义上是相同的。
os模块提供了一种与操作系统交互式的方法。该模块可用于Python 2和3。如果指定的文件不存在,则会抛出FileNotFoundError错误。
os.remove()和os.unlink()都只能删除文件,不能删除目录。如果指定的路径指向目录,则将抛出IsADirectoryError错误。
删除文件需要对包含文件的目录具有写和执行权限。否则,您会得到PermissionError错误。pathlib.Path.unlink(),os.remove()和os.unlink()也可以用于删除符号链接
如果你使用os.remove()或者os.unlink()删除单个文件,请将文件路径作为参数传递。为避免在删除文件时出错,您可以使用异常处理来捕获异常并发送适当的错误消息。
pathlib模块在Python 3.4及更高版本中可用。如果要在Python 2中使用此模块,可以使用pip进行安装。
pathlib提供了一个面向对象的接口,用于处理不同操作系统的文件系统路径。
如果要使用pathlib模块删除文件,请创建指向该文件的Path对象,然后在该对象上调用unlink()方法。
使用os.remove()或者os.unlink()删除文件。
import os
file_path = '/tmp/file.txt'
try:
    os.remove(file_path)
    #os.unlink(file_path)
except OSError as e:
    print("Error: %s : %s" % (file_path, e.strerror))
使用pathlib删除文件。
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))
模式匹配
您可以使用glob模块根据模式匹配多个文件。要递归删除目录中的所有文件及其子目录,请将recursive=True参数传递给glob()函数,并使用**模式。
pathlib模块包含两个glob函数,glob()和rglob()都可以匹配指定目录中的文件。 glob()仅匹配顶级目录中的文件。rglob()递归地匹配目录和子目录中的所有文件。
例如,要删除/tmp目录中的所有.txt文件,包括子目录中的。
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))
以下示例代码删除/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()删除一个非空目录。
shutil模块可让您对文件和目录执行许多高级操作。使用shutil.rmtree()函数,您可以递归删除所有文件。传递给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模块删除目录:
import shutil
dir_path = '/tmp/img'
try:
    shutil.rmtree(dir_path)
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))
结论
Python提供了几个用于处理文件的模块。我们向您展示了如何使用os.remove(),os.unlink(),pathlib.Path.unlink()删除单个文件。
如何使用os.rmdir()和pathlib.Path.rmdir()删除空目录以及如何shutil.rmtree()递归删除目录以及所有的内容。
删除文件或目录时要格外小心,因为一旦删除文件,就无法轻易恢复它。如果您有任何问题或反馈,请随时发表评论。