我有以下结构:
Dir 1
|___Dir 2
|___file 1
|___file 2...
Dir 3
|___Dir 4
|___file 3...
我希望能够递归地找到每个文件,用我自己的方式处理文件,一旦完成,删除文件,移动到下一个。然后,如果目录是空的,删除,以及,工作的方式,直到什么都没有留下。
只是不知道该怎么做。
这是我的
for root, dirs, files in os.walk(dir):
path = root.split('/')
for file in files:
file = os.path.join(root, file)
process_file(file)
os.remove(file)
这很好,但我希望删除子目录,如果且只有他们是空的。
7条答案
按热度按时间bwitn5fc1#
嗯,我想这就行了,得跑了。走了......
svgewumm2#
我意识到这篇文章比较老,可能没有必要再添加一个例子,但是乍一看,我认为初学者应该比这里的其他一些文章更容易理解,因为没有连接,它只导入一个模块,并给出了如何使用一些内置函数的好例子[open()& len()]和新的Python3字符串格式str.format。它还展示了在print()函数中使用file = filename将内容填充到文件是多么简单。
此脚本将使用os.walk扫描根目录(),检查目录和文件的长度,并根据它找到的内容执行条件。它还增加一个计数器来确定使用的目录的数量& empty,并将信息输出到一个文件中。我用Python 3.4编写了这个例子,这对我的目的很有效。如果有人有改进逻辑的想法,请在评论中发表,这样我们都可以从一个新的Angular 来解决问题。
vof42yt13#
这里是另一个我认为很高效的解决方案。当然,使用os.scandir可以提高效率。
首先,我定义了一个通用的
rec_rmdir
函数(reccursive rmdir),它递归地浏览目录树。该算法是一种经典的Depth-first search算法。
然后,很容易定义一个函数来处理文件并删除它。
经典用法:
ltqd579y4#
这只是为了删除空目录,也拉出目录的单个文件。它似乎只回答了问题的一部分,对不起。
我在最后添加了一个循环,不断尝试直到找不到为止。我让函数返回已删除目录的计数。
我的访问被拒绝错误已由以下人员修复:shutil.rmtree fails on Windows with 'Access is denied'
w6lpcovy5#
看来我迟到了.不过,这里有另一个解决方案,可以帮助初学者.
进口
包括在适当的功能中
包括在适当的功能中
csbfibhn6#
很好很简单。关键是在try语句下使用os.removedirs。它已经是递归的了。
s8vozzvw7#
你可以通过递归很容易地做到