【问题标题】:Recursively delete folders below 3rd level in large structure of folders递归删除大型文件夹结构中第 3 级以下的文件夹
【发布时间】:2012-07-07 09:22:08
【问题描述】:

我只有数千个文件夹的大型结构,但我只对将文件夹保留在前三个级别感兴趣,并删除其余文件夹。我正在寻找一个递归 python 脚本来执行此操作。任何帮助深表感谢。

【问题讨论】:

标签: python recursion directory


【解决方案1】:

未经测试,但os.walk() 可能看起来像这样:

import os
import shutil

BASE = '.'
for root, dirs, files in os.walk(BASE):
    n = 0
    head = root
    while head and head != BASE:
        head, _ = os.path.split(head)
        n += 1
    if n == 3:
        for dir in dirs:
            shutil.rmtree(os.path.join(root, dir))
        del dirs[:]      # clear dirs so os.walk() doesn't look for subdirectories

【讨论】:

  • +1。但从理论上讲,分隔符不一定是它们出现的地方的分隔符。如果将 Python 移植到 '/foo/bar\/baz/qux' 具有组件 'foo'、'bar/baz'、'qux' 或 [foo\bar]:baz\qux 具有组件 'baz' 的系统' 和卷 'foo\bar' 上的 'qux'、os.path.dirname(和 walk、split 等)将起作用,但计数/拆分/等。 os.sep 不会。
  • @abarnert,好点,我已经编辑了我的答案,现在应该可以正确处理这种情况了。
【解决方案2】:

正确的方法是使用os.walk,但这里有一个便宜的答案:

>>> import os
>>> os.system('rm -rf */*/*/*/*')
>>> os.system('rmdir */*/*/*')

这将删除至少四层的所有文件,然后尝试删除所有根目录至少三层的目录。由于前面的命令将删除它们的内容,rmdir 将成功(并抱怨所有非-目录离开它找到的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2019-07-02
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多