递归地获取子目录,但只能达到一个级别
Getting subdirectories recursively but only up to a level
我今天偶然发现了一个非常简单的问题。我有这样的目录结构:
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)
我今天偶然发现了一个非常简单的问题。我有这样的目录结构:
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)