LinuxSir.cn,穿越时空的Linuxsir!

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

删除空目录的难题

[复制链接]
发表于 2005-6-19 21:32:10 | 显示全部楼层 |阅读模式
给这个函数传递 'c:/'这样的根目录时就生效了 怎么办呢 这是ms系统
>>> import os
>>> def delD(dir):
        if os.path.isdir(dir):
                if os.listdir(dir)!=[]:
                        for i in os.listdir(dir):
                                i=dir+'/'+i
                                delD(i)
                else:
                        os.rmdir(dir)
发表于 2005-6-21 20:03:40 | 显示全部楼层
以前想到过这个问题的解答方法,不过偷懒, 没有在我的回复中改进,看来偷懒是不应该的。 ^_^

1. 解决办法为:
将 i=dir+'/'+i
更改为:
i=os.path.join(dir,i)

或者将
i=dir+'/'+i
delD(i)
合并为一条语句:
delD(os.path.join(dir,i))

这样处理的话,在windows和linux下均可。


2. 如果是删除 'c:/'这样的目录,请使用如下格式:
delD('C:\\')   或者
delD(r'C:\')
此时原来的 i=dir+'/'+i  不必更改。 因为在windows下也可以使用"/",和"\"的作用是一样的。
回复 支持 反对

使用道具 举报

发表于 2005-6-21 21:24:26 | 显示全部楼层
也可将 i=dir+'/'+i
更改为:
i=dir+os.sep+i
同样可以达到跨平台的目的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-22 07:58:48 | 显示全部楼层
又发现有个毛病
就是如果一个目录下只有一个子目录且是空的
那么这个父目录是不能被删除的
要删除该怎么办呢
回复 支持 反对

使用道具 举报

发表于 2005-6-22 13:54:10 | 显示全部楼层
将 else 删除,将 os.rmdir(dir) 少缩进一层,则原来的程序可以删除你提供的目录下所有的空目录;
    如果此时自身为空,也将被删除。
回复 支持 反对

使用道具 举报

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

本版积分规则

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