金融量化学习---Python, MySQL, Pandas

这里用来记录一些在金融领域,尤其是银行相关的资金、债券、票据中应用到的数据管理与分析, 编程等心得或笔记,以及个人的一点小小兴趣(易经八卦、藏密禅修)等

导航

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

posted on 2021-09-27 17:01  chengjon  阅读(560)  评论(0编辑  收藏  举报