【通用文件操作】删除空文件夹

简介: 对于有强迫症的人来说,空文件夹是不允许存在的东西,而电脑中文件又特别多,而且空文件夹也不好找,要一个一个删除真的是太麻烦了,今天就和大家分享一下删除空文件夹的操作。文章比较啰嗦,读者可以直接跳到最后一段。

一、前言

对于有强迫症的人来说,空文件夹是不允许存在的东西,而电脑中文件又特别多,而且空文件夹也不好找,要一个一个删除真的是太麻烦了,今天就和大家分享一下删除空文件夹的操作。文章比较啰嗦,读者可以直接跳到最后一段。

二、Python的os模块

在Python的os模块中,封装了对文件和路径的操作,我们只需要几行代码就能遍历文件,删除空文件夹。下面我们来看看我们要用到一些操作。

1、查看目录下文件

在os中提供了一个listdir的函数用于查看目录下的文件和文件夹,具体使用如下:

import os
# 列出当前目录下的文件/文件夹
file_list = os.listdir(".")
# 输出返回的文件/文件夹列表
print(file_list)
复制代码

输出结果如下:

['.idea', 'dataset', 'main.py', 'nn', 'test', 'test.py', 'venv']
复制代码

可以看到,返回结果的列表里面存放了当前目录下的文件和文件夹名称。

2、拼接路径

为了安全准确的访问我们的文件,我更推荐用绝对路径的方式访问。这个时候我们就可以借助os.listdir生成文件的绝对路径列表,代码如下:

import os
# 获取当前目录的绝对路径
abs_path = os.path.abspath(".")
# 用于装文件的绝对路径
file_list = []
# 循环拼接
for file in os.listdir(abs_path):
    file_list.append(abs_path + "\\" + file)
print(file_list)
复制代码

输出结果如下:

['D:\\Coding Files\\Workplace\\PythonWorkplace\\Deep Learning\\.idea', 'D:\\Coding Files\\Workplace\\PythonWorkplace\\Deep Learning\\dataset']
复制代码

我们还用列表推导式可以简化一下上面的代码:

import os
abs_path = os.path.abspath(".")
file_list = [abs_path + "\\" + i for i in os.listdir(abs_path)]
复制代码

不过直接拼接"\\"是不可取的,我们可以用os.path.join函数来进行拼接,使用方法如下:

import os
path = os.path.join('test', 'test.py')
# 输出结果:test\test.py
复制代码

使用join函数的话可以自动适配不同系统的斜杠。我们把上面代码改成用join函数:

import os
abs_path = os.path.abspath(".")
file_list = [os.path.join(abs_path, i) for i in os.listdir('.')]
print(file_list)
复制代码

这样我们就完成了路径的拼接。

3、判断是文件还是文件夹

这里也有现成的函数:

import os
abs_path = os.path.abspath(".")
file_list = [os.path.join(abs_path, i) for i in os.listdir('.')]
for file in file_list:
    # 判断是否是文件夹
    if os.path.isdir(file):
        print(file, "是文件夹")
    # 判断是否是文件
    elif os.path.isfile(file):
        print(file, "是文件")
复制代码

这里主要就是下面两个函数:

os.path.isdir(file)
os.path.isfile(file)
复制代码

另外我们可以看看判断目录是否为空,这里就比较特别了:

if not os.listdir("test"):
    print("test目录是空的")
复制代码

这里我们看它是否返回了子列表,如果没有说明目录下没有子文件因此是空的。

4、删除文件

这里需要使用的我们的os.rmdir函数,这里需要传入的目录是空目录才能正常运行,我们可以删除前判断一下是否为空目录:

if os.listdir("test"):
    os.rmdir("test")
复制代码

三、批量删除空文件夹

下面我们可以结合一下上面的内容,实现批量删除空文件夹:

import os
abs_path = os.path.abspath(".")
file_list = [os.path.join(abs_path, i) for i in os.listdir('.')]
for file in file_list:
    if os.path.isdir(file) and not os.listdir(file):
        os.rmdir(file)
        print("删除了", file)
复制代码

输出结果如下:

删除了 D:\Coding Files\Workplace\PythonWorkplace\Deep Learning\test11
复制代码

这样我们就实现了批量删除指定目录下的空文件夹。但是我们应该如果删除全局的空文件夹呢?这里就需要用到walk函数遍历了:

import os
for root, dirs, files in os.walk(r"D:\\"):
    for file in files:
        # 获取文件路径
        path = os.path.join(root, file)
        if os.path.isdir(path) and not os.listdir(path):
            os.rmdir(path)
            print("删除了:", path)
复制代码

上面我们就实现了对D盘所以空文件夹的删除。这里walk的使用后面有机会可以详细介绍。

目录
相关文章
|
关系型数据库 MySQL Nacos
nacos数据库使用PostgreSQL及集群配置
从Nacos2.2版本开始,Nacos提供了数据源扩展插件,以便让需要进行其他数据库适配的用户自己编写插件来保存数据。
|
4月前
|
供应链 测试技术 开发者
用 Docker 轻松部署 ERPNext 15:多场景实战指南
ERPNext 15 是一款功能全面的开源企业资源规划系统,结合 Docker 容器化部署,具备高效、灵活、低成本等优势。适用于小微企业数字化起步、多分支机构协同办公、开发者测试环境搭建、短期项目管理及企业内部培训等多种场景。模块化设计支持按需扩展,满足不同规模企业需求,是实现高效企业管理的理想选择。
用 Docker 轻松部署 ERPNext 15:多场景实战指南
|
机器学习/深度学习 人工智能 自然语言处理
NotebookLM与NotebookLlama 了解下 | AI工具
在AI技术飞速发展的今天,Google和Meta分别推出了基于大型语言模型的笔记本应用——NotebookLM和NotebookLlama。这两款产品不仅提供了强大的文档处理和编码支持,还在文档和编码领域引领了创新。NotebookLM强调个性化和隐私保护,而NotebookLlama则以开源和高度定制性著称。本文将深入解析这两款产品并进行对比分析。【10月更文挑战第16天】
963 2
|
人工智能 小程序 Java
【技巧】Excel加锁忘密码?一文教你破解之道!
本文介绍了两种有效解决Excel文件被加锁且遗忘密码的方法:一是通过VBA代码操作解锁;二是利用压缩文件方式解除密码保护。无论你是编程高手还是技术新手,都能找到适合自己的解决方案,轻松恢复对文件的完全控制权。此外,还提供了丰富的相关阅读资源,助你进一步提升技能。
1569 3
【技巧】Excel加锁忘密码?一文教你破解之道!
|
小程序
日常记账微信小程序模板源码
日常记账微信小程序模板源码 模板介绍 一款实用的日常记账微信小程序模板下载。包含:引导页、登录、记账中心、消息、通讯录、个人中心等模块。
222 4
小功能⭐️Unity解决物体移动速度过快不能检测到碰撞
小功能⭐️Unity解决物体移动速度过快不能检测到碰撞
|
JavaScript 编译器
vue3引入element-plus完整步骤
vue3引入element-plus完整步骤
1981 5
|
Linux C#
阿里云域名收费标准(com/cn等不同后缀价格表)
阿里云域名收费标准包括com、cn等不同域名后缀,域名注册价格、域名续费价格和域名转入价格
23060 0
ggplot2|扩展包从0开始绘制雷达图
ggplot2|扩展包从0开始绘制雷达图
912 0
|
Java Android开发
命令行生成Android jks签名文件并获取jks信息
命令行生成Android jks签名文件并获取jks信息
959 0