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

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

嘿,问题一眼就能看出来——你把walklevel函数里阻止os.walk深入到更深层级的核心代码给注释掉了!

为什么你的代码会打印多级路径?

os.walk的工作逻辑是:每遍历到一个目录,就会根据dirs列表里的内容去递归遍历下一级子目录。如果你想要限制遍历深度,必须修改dirs列表——清空它(del dirs[:])就能让os.walk停止继续往下走。你现在把这段判断和清空的代码注释掉了,os.walk自然会老老实实遍历所有深度的目录。

修正后的完整代码

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)
        # 当当前路径的层级达到指定深度时,清空dirs阻止继续遍历下层
        if num_sep + level <= num_sep_this:
            del dirs[:]
        print(root)

# 调用测试
rawsource = "/Users/user/project/CODE_BASE"
list(walklevel(rawsource))

关键逻辑解释

  • 初始目录/Users/user/project/CODE_BASE的路径分隔符/数量是4
  • 当遍历到它的一级子目录(比如/Users/user/project/CODE_BASE/website)时,分隔符数量变成5,刚好等于num_sep + level(4+1)
  • 这时候执行del dirs[:],os.walk就不会再去遍历这个子目录下的.git等深层路径了

这样修改后,你只会得到初始目录本身,以及它的直接一级子目录,完全符合你的需求。

内容的提问来源于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 08:00:31