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

使用os.walk遍历目录时如何仅输出一级子目录路径?

解决os.walk只输出指定深度目录的问题

嘿,我来帮你排查下问题所在~

你遇到的核心问题是注释掉了控制遍历深度的关键代码!咱们一步步来看:

原代码的问题

os.walk() 默认会递归遍历所有层级的子目录,所以会输出从根目录开始的所有深度路径,这就是为什么你会看到.git/info、refs/remotes/origin这类多级路径。

你的walklevel函数哪里错了

你写的walklevel函数里,把最关键的del dirs[:]判断逻辑注释掉了!这行代码的作用是:当遍历到指定深度时,清空当前目录的子目录列表,告诉os.walk()不要再继续往下遍历更深的层级。没有这行,os.walk还是会一路递归到底。

修正后的walklevel函数

把注释掉的代码恢复,就能实现只遍历到指定深度(这里level=1,也就是一级子目录):

import os

def walklevel(some_dir, level=1):
    some_dir = some_dir.rstrip(os.path.sep)
    assert os.path.isdir(some_dir)
    # 统计初始目录的路径分隔符数量,用来判断当前深度
    num_sep = some_dir.count(os.path.sep)
    for root, dirs, files in os.walk(some_dir):
        yield root, dirs, files
        num_sep_this = root.count(os.path.sep)
        # 当当前路径深度达到指定层级时,停止深入子目录
        if num_sep + level <= num_sep_this:
            del dirs[:]
        print(root)

rawsource = "/Users/user/project/CODE_BASE"
list(walklevel(rawsource))

更简单的替代方案

如果你只是想获取CODE_BASE下的直接一级子目录,其实不用写遍历函数,直接用os.listdir()筛选更高效:

import os

rawsource = "/Users/user/project/CODE_BASE"
for item in os.listdir(rawsource):
    full_path = os.path.join(rawsource, item)
    if os.path.isdir(full_path):
        print(full_path)

这个方法直接列出当前目录下的所有条目,然后只保留目录类型的路径,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:54:22