如何用Python删除空文件夹?


在本教程中,我们将学习如何用Python只删除空文件夹。随着您删除文件或卸载程序,空文件夹可能会随着时间的推移而累积,但它们可能难以找到并手动删除。幸运的是,Python 提供了一种快速有效的方法来自动删除空目录。现在,我们将讨论如何在 Python 中删除空文件夹。

方法

我们可以使用内置的 os 模块来识别并使用 Python 删除空文件夹。以下是我们可以实现此目标的基本工作流程:

  • 我们可以使用 os.walk() 递归遍历文件系统,从给定的根目录开始。

  • 对于在遍历期间遇到的每个目录,我们可以使用 os.listdir() 获取目录中包含的文件和子目录的列表。

  • 如果 os.listdir() 返回的列表为空,我们可以假设该目录为空,然后我们可以使用 os.rmdir() 删除它。

  • 如果列表不为空,我们可以递归地对目录内的每个子目录调用相同的函数,继续遍历。

现在让我们使用这个创建一个 delete_empty_folders() 函数。语法如下:

def delete_empty_folders(root):
   for dirpath, dirnames, filenames in os.walk(root, topdown=False):
      for dirname in dirnames:
         full_path = os.path.join(dirpath, dirname)
         if not os.listdir(full_path): 
            os.rmdir(full_path)

让我们分解这段代码的工作原理

  • delete_empty_folders() 函数接受单个参数 root,它指定遍历的起始目录。我们使用 os.walk() 递归遍历文件系统,从 root 开始。

  • 对于在遍历期间遇到的每个目录,os.walk() 返回一个元组,其中包含目录的路径 (dirpath)、目录内子目录名称的列表 (dirnames) 和目录内文件名称的列表 (filenames)。

  • 我们以相反的顺序遍历 dirnames 列表(使用 topdown=False),以便我们首先删除最深的空目录。对于 dirnames 中的每个目录,我们使用 os.path.join() 构造目录的完整路径。

  • 如果目录为空(即,如果 os.listdir(full_path) 返回空列表),我们会打印一条消息,指示我们正在删除该目录。然后我们使用 os.rmdir() 删除目录。

就是这样!使用此代码,我们可以识别并删除从给定根目录开始的空目录。

示例

在我们对整个文件系统运行 delete_empty_folders() 函数之前,让我们在一个较小的目录子集上对其进行测试,以确保其正常工作。

以下是一个我们可以用于测试的示例目录结构:

test_folder/
   empty_folder/
   nonempty_folder/
      file.txt

我们可以使用以下 Python 代码创建此目录结构,然后在 test_folder 目录上调用 delete_empty_folders() 函数:

import os

# Create test folder structure
root = "test_folder"
os.makedirs(os.path.join(root, "empty_folder"))
os.makedirs(os.path.join(root, "nonempty_folder"))
with open(os.path.join(root, "nonempty_folder", "file.txt"), "w") as f: f.write("This is a test file.")
delete_empty_folders(root)

输出

Deleting empty directory: test_folder\empty_folder

如果我们再次检查 test_folder 目录,我们应该看到 empty_folder 已被删除,只留下 test_folder 目录中的 nonempty_folder。

示例

现在让我们快速看一下另一个案例。以下是一个我们可以用于测试的示例目录结构:

test_folder/
   nonempty_folder/
      file1.txt
		file2.txt
	empty_folder1/
	empty_folder2/

我们可以使用以下 Python 代码创建此目录结构,然后在 test_folder 目录上调用 delete_empty_folders() 函数:

import os

# Create test folder structure
root = "test_folder"
os.makedirs(os.path.join(root, "empty_folder1"))
os.makedirs(os.path.join(root, "empty_folder2"))
os.makedirs(os.path.join(root, "nonempty_folder"))
with open(os.path.join(root, "nonempty_folder", "file1.txt"), "w") as f: f.write("This is the 1st test file.")
with open(os.path.join(root, "nonempty_folder", "file2.txt"), "w") as f: f.write("This is the 2nd test file.")
delete_empty_folders(root)

输出

Deleting empty directory: test_folder\empty_folder1
Deleting empty directory: test_folder\empty_folder2

如果我们再次检查 test_folder 目录,我们应该看到 empty_folder1 和 empty_folder2 都已被删除,只留下 test_folder 目录中的 nonempty_folder。

结论

在本教程中,我们学习了如何使用 Python 识别和删除文件系统上的空文件夹。使用本教程中介绍的代码和技术,我们现在拥有了一个强大的工具来管理我们的文件系统并保持其组织性。无论我们是在大型数据分析项目之后进行清理,还是只是试图让我们的计算机平稳运行,使用 Python 识别和删除空文件夹的能力都可以节省我们的时间,并使我们的生活更轻松。

更新于:2023年5月12日

2K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.