在日常文件管理或自动化清理任务中,经常需要快速找出指定目录下的所有空文件夹,以便后续删除或整理。Python 的 os 模块提供了 os.walk 递归遍历函数,配合 tkinter 可构建一个简单的 GUI 工具,输入目录并一键获取空文件夹的数量和完整路径列表。
实现思路
核心逻辑是利用 os.walk 遍历目录树,对每个目录检查其下是否既无子目录也无文件。如果条件满足,则计数加一,同时记录该目录的绝对路径。遍历完成后返回两个值:空文件夹总数和路径列表。GUI 部分由 tkinter 完成,包含一个输入框、一个按钮和一个结果显示标签。
代码实现
完整代码如下:- import os
- import tkinter as tk
- def count_and_list_empty_subdirectories(root_dir):
- """
- 统计指定根目录下的空文件夹并记录路径
- :param root_dir: 要扫描的根目录路径
- :return: (空文件夹数量, 空文件夹路径列表)
- """
- empty_dir_count = 0
- empty_dirs = []
- for root, dirs, files in os.walk(root_dir):
- if not dirs and not files:
- empty_dir_count += 1
- empty_dirs.append(root)
- return empty_dir_count, empty_dirs
- def display_empty_folders():
- """
- 从输入框获取路径,调用统计函数并显示结果
- """
- root_directory = entry.get()
- if not root_directory:
- result_label.config(text="请输入要检测的目录路径!")
- return
- empty_folder_count, empty_folder_names = count_and_list_empty_subdirectories(root_directory)
- result_text = f"在目录 '{root_directory}' 中:\n"
- result_text += f"空文件夹的数量为: {empty_folder_count}\n\n"
- result_text += "空文件夹的名称及路径如下:\n"
- for name in empty_folder_names:
- result_text += f" - {name}\n"
- result_label.config(text=result_text)
- # 创建主窗口
- root = tk.Tk()
- root.title("空文件夹检测工具")
- root.geometry("500x500")
- # 界面组件
- label = tk.Label(root, text="请输入要检测的目录路径:")
- label.pack(pady=10)
- entry = tk.Entry(root)
- entry.pack(pady=5)
- button = tk.Button(root, text="检测", command=display_empty_folders)
- button.pack(pady=10)
- result_label = tk.Label(root, text="", justify=tk.LEFT)
- result_label.pack(pady=10)
- root.mainloop()
复制代码
关键函数解析
1. count_and_list_empty_subdirectories(root_dir)
- 参数:root_dir 为待扫描的根目录路径(字符串),支持绝对路径和相对路径。
- 内部使用 os.walk(root_dir) 进行递归遍历。每次迭代返回三个值:当前目录路径 root、子目录名称列表 dirs、文件名称列表 files。
- 判断条件 if not dirs and not files:当 dirs 和 files 均为空列表时,表示该目录为空。注意,空目录指没有子目录且没有文件,但可能包含隐藏文件(如 .DS_Store),若需忽略隐藏文件可额外添加过滤逻辑。
- 每找到一个空目录,计数器 empty_dir_count 自增1,并将该目录的完整路径追加到 empty_dirs 列表中。
- 函数返回一个元组 (count, path_list)。
2. display_empty_folders()
- 作为“检测”按钮的回调函数。
- 通过 entry.get() 获取用户输入的目录路径。若输入为空,则在结果标签上显示提示信息并中止。
- 调用上述统计函数,获取空文件夹数量和路径列表。
- 构建多行文本字符串,依次显示扫描目录、空文件夹总数以及每个空文件夹的完整路径。
- 通过 result_label.config(text=...) 更新标签内容。
GUI 布局与事件循环
- 主窗口尺寸设为 500×500,标题为“空文件夹检测工具”。
- 各组件按垂直顺序使用 pack() 放置,并设置 pady 参数让界面更美观。
- 将 display_empty_folders 绑定到按钮的 command 参数,点击即触发扫描。
- 最终调用 root.mainloop() 启动 tkinter 主事件循环,保持窗口响应。
适用场景与扩展
该脚本适用于:
- 清理项目中残留的空目录
- 检查备份目录中是否有无效空文件夹
- 统计文件迁移后遗留的空壳目录
若需增强功能,可在遍历时忽略某些系统目录(如 .git、__pycache__),或加入选择文件夹的对话框(tkinter.filedialog.askdirectory)。不过上述基础版本已可直接使用。
注意:os.walk 默认会递归所有子目录,若目录层级过深或包含大量文件,扫描可能耗时较长。对于跨盘扫描,请确保权限足够。 |