gpt4 book ai didi

python - 打印包含相同子文件夹的所有文件夹中哪个子文件夹为空?

转载 作者:行者123 更新时间:2023-12-01 09:11:17 25 4
gpt4 key购买 nike

我有一个像这样的文件夹A:

A>>(B,C,D)(subfolders)>>both B,C and D have folders 1,2,3 each.

在这种情况下,B、C 和 D 中的子文件夹“3”恰好是空的。

如何检查并打印所有文件夹中哪个文件夹恰好为空例如,要使其搜索并打印数字“3”,因为它是所有文件夹 B、C 和 D 中唯一为空的子文件夹?

我尝试过的代码:

for i in glob.iglob('**/Desktop/A/**' ,recursive = True):
if not os.listdir(i):
print(f'{i} is empty everywhere' + '\n')

这不起作用。

所有文件夹都有相同的子文件夹(名称),但其中一些是空的。我需要找到所有这些文件夹中哪些是空的并打印它。

最佳答案

我们需要 os 中的两个函数模块

from os import walk
from os.path import join

我们需要一个起点

dir = '/your/top/directory'

walk返回一个生成器,在每一步迭代它,我们有当前目录的路径、目录列表和文件列表,但我们不想迭代并且只对列表感兴趣当前目录中的目录数,因此

dirs_l1 = next(walk(dir))[1]

请注意,必须处理生成器,上面的内容并不算太浪费......

现在我们在 1 级子目录(l1 sd,根目录中包含的 sd)上有一个内部循环,以创建 2 级目录集列表,将其解压并传递给 set.intersection ,这样在 dirs_l2我们最终得到了 1 级每个目录中存在的所有 2 级目录的集合

dirs_l2 = set.intersection(*[set(next(walk(join(dir, d)))[1]) for d in dirs_l1])

我们对每个 l1 sd 中存在的这些内部目录进行循环,并使用 all内置我们检查,对于每个 l1 sd,所有 l2 sd 都是空的,在这种情况下,我们打印始终为空的 l2 子目录的名称

for d2 in dirs_l2:
if all(next(walk(join(dir, d1, d2)))[1:] == ([],[]) for d1 in dirs_l1):
print(d2)
<小时/>

示例

$ cat A.py
from os import walk
from os.path import join
dir = './A'
dirs_l1 = next(walk(dir))[1]
dirs_l2 = set.intersection(*[set(next(walk(join(dir, d)))[1]) for d in dirs_l1])
for d2 in dirs_l2:
if all(next(walk(join(dir, d1, d2)))[1:] == ([], []) for d1 in dirs_l1): print(d2)
$ tree A
A
├── A
│   ├── 1
│   │   └── a
│   ├── 2
│   │   └── b
│   └── 3
├── B
│   ├── 1
│   │   └── a
│   ├── 2
│   │   └── b
│   └── 3
├── C
│   ├── 1
│   │   └── a
│   ├── 2
│   │   └── b
│   └── 3
└── D
├── 1
│   └── a
├── 2
│   └── b
└── 3
$ python A.py
3
$

关于python - 打印包含相同子文件夹的所有文件夹中哪个子文件夹为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51635552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com