Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以递归方式获取子目录,但仅限于某一级别_Python_Python 3.x_Path_Pathlib - Fatal编程技术网

Python 以递归方式获取子目录,但仅限于某一级别

Python 以递归方式获取子目录,但仅限于某一级别,python,python-3.x,path,pathlib,Python,Python 3.x,Path,Pathlib,今天我偶然发现了一个非常简单的问题。我的目录结构如下: main_dir |_A |_X |_Y |_B |_X |_Y |_C |_X |_PP |_QQ |_Y |_PP 我希望递归地获取所有子目录,直到出现X和Y的级别。我不想把PP和QQ包括在那个列表中 我试过这个: mai_dir = Path("main_dir

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

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

       |_X
         |_PP
         |_QQ 
       |_Y
         |_PP 
我希望递归地获取所有子目录,直到出现X和Y的级别。我不想把PP和QQ包括在那个列表中

我试过这个:

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循环,但我想知道是否有办法避免这里的循环。

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

mai_dir = pathlib.Path(".")
print(list(mai_dir.glob("**/[XY]/")))
如果单个glob无法剪切它,您可以创建两个或多个列表并合并它们。

类似这样的内容

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模块中是否有任何等效项?无需担心。谢谢,我以为你想从你的主要主管那里得到结构,而且只有两级以下。对不起,main_dir.glob**/*[XY]/,我认为这是正确的