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]/,我认为这是正确的