【问题标题】:Getting subdirectories recursively but only up to a level递归获取子目录,但只能达到一个级别
【发布时间】:2026-01-11 09:25:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: python python-3.x path pathlib


    【解决方案1】:

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

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

    如果单个 glob 无法解决问题,您可以创建两个或多个列表并将它们合并。

    【讨论】:

    • main_dir.glob("**/*[XY]/"),我认为这是正确的
    【解决方案2】:

    这样的?

    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)
    

    【讨论】:

    • pathlib 模块中的任何等效项?
    • 不用担心。谢谢
    • 我以为你想从你的主目录中获取结构,并且只有两层以下。对不起。