zoukankan      html  css  js  c++  java
  • python 代码删除空目录

    最近新换了工作,整理文档,先用我最爱的 Anti-Twin 把重复的文档删除,由于产生了许多空文件夹,所以拟用代码的方式将其清除,只留下有文档的文件夹。
    于是,我做了以下尝试:

    基础

    要使用的os函数:
    
    * os.path.isdir() #判断是否为目录,返回True / False
    * os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    * os.path.join(dirname, filename) #链接目录与文件名,生成一个新的名称
    * os.rmdir() #删除文件夹
    
    代码如下:
    import os
    
    path = r'D:MyData	est'
    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	est'
    
    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	est'
    
    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

  • 相关阅读:
    css控制英文内容自动换行問題
    jquery添加select option两种代码思路比较
    C++实现单例模式
    C++实现单例模式
    windows下socket编程:区分shutdown()及closesocket()
    windows下socket编程:区分shutdown()及closesocket()
    socket关闭
    socket关闭
    C++模板的一些巧妙功能
    C++模板的一些巧妙功能
  • 原文地址:https://www.cnblogs.com/treasury-manager/p/15343758.html
Copyright © 2011-2022 走看看