一、前言
对于有强迫症的人来说,空文件夹是不允许存在的东西,而电脑中文件又特别多,而且空文件夹也不好找,要一个一个删除真的是太麻烦了,今天就和大家分享一下删除空文件夹的操作。文章比较啰嗦,读者可以直接跳到最后一段。
二、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
的使用后面有机会可以详细介绍。