LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1179|回复: 7

为什么我不能用python删除空目录呢?

[复制链接]
发表于 2005-6-3 03:30:22 | 显示全部楼层 |阅读模式
这是我的函数:
>>> def delF(dir):
        if os.path.isdir(dir):
                if os.listdir(dir)==[]:
                        os.rmdir(dir)
                else :
                        for i in os.listdir(dir):
                                delF(i)
发表于 2005-6-3 12:50:23 | 显示全部楼层
没验证,但我想应该是这个原因:
    当目录为空时,第二个if成立,所以可以删除空目录,对吧?
    当目录非空时,第二个if不成立,直接跳到else语句执行,从而清空该目录下的子目录和文件,但是因为不会执行第二个if中的rmdir,所以无法删除目录本身;因为程序是递归的,最后就将留下所有的空目录。
  
   解决办法很简单:将if和else中的语句对换即可... (还是没验证,要是不行,我再测试吧,呵呵)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-4 09:09:52 | 显示全部楼层
不对啊 如果目录非空 就对各个元素进行循环 如果是空目录应该可以删除的啊
回复 支持 反对

使用道具 举报

发表于 2005-6-4 14:53:32 | 显示全部楼层
试一下这个吧,我试验过,应该没什么问题:

import os

def delF(dir):
       
if os.path.isdir(dir):
               
if os.listdir(dir)!=[]:
                       
for i in os.listdir(dir):
                               
i=dir+"/"+i
                                delF(i)

                os.rmdir(dir)

        else:
               
os.remove(dir) # if dir isn't a directory, delete it, too  
               


delF("tmp2")    #将tmp2用你要删除的目录代替,比如 delF("/root"), 不过千万别那么做,我可不承担后果啊。  (  :




在这种论坛里,Python的格式真是致命啊!调成这样子真的好麻烦,而且还是无法令人觉得满意!   :(
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-4 23:19:53 | 显示全部楼层
成功了 谢谢你 我是忘了i=dir+"/"+i
谢谢你费心排的格式
谢谢
回复 支持 反对

使用道具 举报

发表于 2005-6-5 00:06:39 | 显示全部楼层

  1. import os
  2. for pn, dirs, files in os.walk('/'):
  3.         if len(dirs) == 0 and len(files) == 0:
  4.                 os.rmdir(pn)
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-6-5 00:15:35 | 显示全部楼层
贴代码要注意使用
[ code]
你的代码
[ /code]
回复 支持 反对

使用道具 举报

发表于 2005-6-5 12:28:27 | 显示全部楼层
Thanks!


Post by 弥敦路九号
贴代码要注意使用
[ code]
你的代码
[ /code]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表