python 代码删除空目录
最近新换了工作,整理文档,先用我最爱的 Anti-Twin 把重复的文档删除,由于产生了许多空文件夹,所以拟用代码的方式将其清除,只留下有文档的文件夹。
于是,我做了以下尝试:
基础
要使用的os函数:
* os.path.isdir() #判断是否为目录,返回True / False
* os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
* os.path.join(dirname, filename) #链接目录与文件名,生成一个新的名称
* os.rmdir() #删除文件夹
代码如下:
import os
path = r'D:\MyData\test'
def delete_gap_dir(dir):
if os.path.isdir(dir):
for d in os.listdir(dir):
delete_gap_dir(os.path.join(dir, d))
if not os.listdir(dir):
os.rmdir(dir)
最后运行:
delete_gap_dir(path)
os.walk方法:简练却删不净的代码,但思路很好,可以改进
os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
import os
for curDir, dirs, files in os.walk("test"):
print("====================")
print("现在的目录:" + curDir)
print("该目录下包含的子目录:" + str(dirs))
print("该目录下包含的文件:" + str(files))
使用这个命令来删除空文件夹也非常方便(但得删好几遍才行):
import os
path = r'D:\MyData\test'
def delfiles(dirpath):
for root, dirs, files in os.walk(dirpath):
if dirs == files:
os.rmdir(root)
delfiles(dirpath)
最啰嗦但校验完备的代码:
import os
path = r'D:\MyData\test'
def deldir(path):
"""
清理空文件夹和空文件
param path: 文件路径,检查此文件路径下的子文件
"""
print ('*'*30)
try:
files = os.listdir(path) # 获取路径下的子文件(夹)列表
print (files)
for file in files:
print ('遍历路径:'+os.fspath(path +'/'+ file))
if os.path.isdir(os.fspath(path+'/'+file)): # 如果是文件夹
print (file+'是文件夹')
if not os.listdir(os.fspath(path+'/'+file)): # 如果子文件为空
print (file+'是空文件夹,即将执行删除操作')
os.rmdir(os.fspath(path+'/'+file)) # 删除这个空文件夹
else:
print (file+'不是空文件夹')
deldir(os.fspath(path+'/'+file)) # 遍历子文件
if not os.listdir(os.fspath(path+'/'+file)): # 如果子文件为空
print (file+'是空文件夹,即将执行删除操作')
os.rmdir(os.fspath(path+'/'+file)) # 删除这个空文件夹
elif os.path.isfile(os.fspath(path+'/'+file)): # 如果是文件
print(file+'是文件')
if os.path.getsize(os.fspath(path+'/'+file)) == 0: # 文件大小为0
print (file+'是空文件,即将执行删除操作!')
os.remove(os.fspath(path+'/'+file)) # 删除这个文件
return
except FileNotFoundError:
print ("文件夹路径错误")
if __name__ == "__main__":
path = input("Please input the files path:") # 输入路径
deldir(path)
以上三种功能都可以试试。
os.walk命令的应用:
https://www.runoob.com/python/os-walk.html (入门)
https://zhuanlan.zhihu.com/p/149824829 (高级)
Anti-Twin下载:
http://www.joerg-rosenthal.com/en/antitwin/download.html
引用:
https://www.cnblogs.com/tay007/p/11322412.html
https://my.oschina.net/blueyuquan/blog/1587906