递归获取子目录,但只能达到一个级别

时间:2019-02-19 07:01:51

标签: python python-3.x path pathlib

我偶然发现了一个非常简单的问题。我有这样的目录结构:

main_dir
    |_A
       |_X
       |_Y  
    |_B
       |_X
       |_Y 
    |_C

       |_X
         |_PP
         |_QQ 
       |_Y
         |_PP 

我想递归地将所有子目录提升到存在XY的级别。我不想在该列表中包括PPQQ

我尝试过:

mai_dir = Path("main_dir")
subdirs = [x for x in iter(main_dir("**/*")) if x.is_dir()] 

这种方法的问题在于它还包括以下结果:

main_dir/A
main_dir/B
main_dir/C
main_dir/C/X/PP
main_dir/C/Y/QQ

我想排除这些结果。我知道我可以使用for来应用另一个if-else循环,但是我想知道是否有办法避免此处的循环。

2 个答案:

答案 0 :(得分:1)

*匹配所有文件和目录。如果您只想匹配某些特定目录,请明确指出。

mai_dir = pathlib.Path(".")
print(list(mai_dir.glob("**/[XY]/")))

如果单个球无法切割,则可以创建两个或多个列表并将其合并。

答案 1 :(得分:0)

像这样吗?

import os
path = r"c:\MyDownloads"
for root,dirs,files in os.walk(path):
    if root[len(path)+1:].count(os.sep)<2:
        print(os.path.join(root))

或者这个:

import pathlib

path = r"c:\MyDownloads"
mai_dir = pathlib.Path(path)
for i in list(mai_dir.glob("**/")):
    if len(i.parts) < len(mai_dir.parts) + 3:
        print(i)