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