You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python列出两级内所有目录路径?是否支持多级通用方案?

目录路径列表解决方案

一、针对特定两级目录的筛选

如果只需要筛选指定的一级目录(如a、c)和二级目录(如1、4),可以直接通过指定目标目录集合,结合路径拼接和存在性检查来实现:

使用Pathlib(推荐,Python 3.4+)

from pathlib import Path

# 替换为你的实际根目录路径,比如"/home/user/root_dir"
root_dir = Path(".")
# 定义要包含的一级和二级目录
target_first_level = {"a", "c"}
target_second_level = {"1", "4"}

# 生成并筛选有效路径
valid_paths = [
    str(root_dir / first / second)
    for first in target_first_level
    for second in target_second_level
    if (root_dir / first / second).is_dir()
]

# 输出结果
for path in valid_paths:
    print(path)

使用os模块

import os

root_dir = "."
target_first_level = {"a", "c"}
target_second_level = {"1", "4"}

valid_paths = []
for first in target_first_level:
    first_path = os.path.join(root_dir, first)
    if os.path.isdir(first_path):
        for second in target_second_level:
            full_path = os.path.join(first_path, second)
            if os.path.isdir(full_path):
                valid_paths.append(full_path)

for path in valid_paths:
    print(path)

二、通用方案:列出最多N级内的所有目录路径

如果需要灵活指定最大深度(比如最多3级),可以用以下两种通用方法:

方法1:os.walk 控制深度

os.walk可以遍历目录树,通过计算当前路径的深度来控制遍历范围:

import os

def get_paths_up_to_depth(root_dir, max_depth):
    result = []
    for root, dirs, _ in os.walk(root_dir):
        # 计算当前路径相对于根目录的深度
        current_depth = root[len(os.path.abspath(root_dir)):].count(os.sep)
        # 加入当前目录路径
        result.append(root)
        # 如果达到最大深度,停止遍历该分支的子目录
        if current_depth == max_depth:
            dirs[:] = []
    return result

# 示例:列出最多3级的所有目录路径
root = "."
max_depth = 3
all_dir_paths = get_paths_up_to_depth(root, max_depth)
for path in all_dir_paths:
    print(path)

方法2:Pathlib glob 匹配指定深度

利用Pathlib的glob模式,生成对应深度的匹配规则,更简洁直观:

from pathlib import Path

def get_paths_up_to_depth(root_dir, max_depth):
    root = Path(root_dir)
    result = [str(root)]  # 包含根目录本身
    for depth in range(1, max_depth + 1):
        # 生成匹配模式:比如深度1是"*/",深度2是"*/*/"
        pattern = "/".join(["*"] * depth)
        # 遍历所有匹配的目录
        for path in root.glob(pattern):
            if path.is_dir():
                result.append(str(path))
    return sorted(result)

# 示例使用
root = "."
max_depth = 3
all_dir_paths = get_paths_up_to_depth(root, max_depth)
for path in all_dir_paths:
    print(path)

注意点

  • 如果需要包含文件路径而非仅目录,只需调整代码中的is_dir()检查为exists(),或在os.walk中同时处理files列表。
  • 路径分隔符会自动适配系统(Windows用\,Linux/macOS用/),无需手动处理。

内容的提问来源于stack exchange,提问作者CoolMathematician

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:50:15