原文: Python Delete File – How to Remove Files and Folders

许多编程语言都有内置的功能来处理文件和文件夹。作为一种内置了许多令人兴奋的功能的丰富编程语言,Python 也不例外。

Python 有 OSPathlib 模块,可用于创建文件和文件夹、编辑文件和文件夹、读取文件的内容,以及删除文件和文件夹。

在这篇文章中,我将向你展示如何用 OS 模块删除文件和文件夹。

我们将讨论的内容

  • 如何用 OS 模块删除文件
  • 如何用 Pathlib 模块删除文件
  • 如何用 OS 模块删除空文件夹
  • 如何用 Pathlib 模块删除空文件夹
  • 如何用 shutil 模块删除非空文件夹
  • 总结

如何用 OS 模块删除文件

要用 OS 模块删除任何文件,你可以使用它的 remove() 方法。然后你需要在 remove() 方法中指定特定文件的路径。但首先,你需要通过导入 OS 模块来引入它:

import os

os.remove('path-to-file')

这段代码删除了当前文件夹中的 questions.py 文件:

import os

os.remove('questions.py')

如果文件在另一个文件夹内,你需要指定包括文件名在内的完整路径,而不是仅仅指定文件名:

import os

os.remove('folder/filename.extension')

下面的代码显示了我如何删除 textFiles 文件夹内的 faq.txt 文件:

import os

os.remove('textFiles/faq.txt')

为了使事情变得更好,你可以在删除文件之前先检查该文件是否存在:

import os

# Extract the file path to a variable
file_path = 'textFiles/faq.txt'

#check if the file exists with path.exists()
if os.path.exists(file_path):
    os.remove('textFiles/faq.txt')
    print('file deleted')
else:
    print("File does not exists")

你也可以使用 try..except 实现相同的目的:

import os

try:
    os.remove('textFiles/faq.txt')
    print('file deleted')
except:
    print("File doesn't exist")

如何用 Pathlib 模块删除文件

pathlib 模块是 Python 标准库中的一个模块,它为你提供了一个面向对象的方法来处理文件系统的路径。你也可以用它来处理文件。

pathlib 模块有一个 unlink() 方法,你可以用来删除一个文件。你需要用 pathlib.Path() 得到文件的路径,然后在文件路径上调用 unlink() 方法:

import pathlib

# get the file path
try:
    file_path = pathlib.Path('textFiles/questions.txt')
    file_path.unlink()
    print('file deleted')
except:
    print("File doesn't exist")

如何用 OS 模块删除空文件夹

OS 模块提供了一个 rmdir() 方法,你可以用它来删除一个文件夹。

但是,你删除一个空文件夹的方式与你删除一个有文件或子文件夹的文件夹的方式不同。让我们先看看你如何删除空文件夹。

下面是我如何删除一个空的 client 文件夹:

import os

try:
    os.rmdir('client')
    print('Folder deleted')
except:
    print("Folder doesn't exist")

如果你试图删除一个里面有文件或子文件夹的文件夹,你会得到 Directory not empty error

import os

os.rmdir('textFiles') # OSError: [Errno 66] Directory not empty: 'textFiles'

如何用 pathlib 模块删除空文件夹

使用 pathlib 模块,你可以将你想删除的文件夹的路径提取到一个变量中,然后对该变量调用 rmdir()

import pathlib

# get the folder path
try:
    folder_path = pathlib.Path('docs')
    folder_path.rmdir()
    print('Folder deleted')
except:
    print("Folder doesn't exist")

要删除一个有子文件夹和文件的文件夹,你必须先删除所有的文件,然后对现在的空文件夹调用 os.rmdir()path.rmdir()。但你可以使用 shutil 模块来替代。我很快就会向你展示这一点。

如何用 shutil 模块删除一个非空文件夹

shutil 模块有一个 rmtree() 方法,你可以用来删除一个文件夹及其内容——即使它包含多个文件和子文件夹。

你需要做的第一件事是将文件夹的路径提取到一个变量中,然后对该变量调用 rmtree()

下面是我如何删除 textFiles 文件夹内一个名为 subTexts 的文件夹:

import shutil

try:
    folder_path = 'textFiles/subTexts'
    shutil.rmtree(folder_path)
    print('Folder and its content removed')
except:
    print('Folder not deleted')

下面是我如何删除整个 textFiles 文件夹(它有几个文件和一个子文件夹):

import shutil

try:
    folder_path = 'textFiles'
    shutil.rmtree(folder_path)
    print('Folder and its content removed') # Folder and its content removed
except:
    print('Folder not deleted')

总结

这篇文章告诉你如何用 Python 的 OSpathlib 模块删除一个文件和空文件夹。因为你可能也需要删除非空文件夹,我们看了一下如何用 shutil 模块来实现。

如果你觉得这篇文章有帮助,不要犹豫,与你的朋友和家人分享它。