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

Python os.walk获取二级目录异常:仅返回最后一个一级目录子目录问题排查

问题分析与解决

首先,咱们来拆解下你代码里的几个小问题,以及为什么你看起来只拿到了最后一个一级目录的子目录:

1. 输出干扰:函数无返回值导致的None输出

你的walk_method函数内部确实在循环里逐个打印每个一级目录的二级目录,但你最后执行了print(walk_method(dirname))——而这个函数没有任何return语句,所以它默认返回None。这就导致你的输出里,前面的二级目录打印内容可能被你忽略了,只看到最后一行的None,或者误以为只有最后一个打印的结果是有效的。

2. 路径拼接的隐患

你直接用dirname+dir拼接路径,虽然在当前dirname是E:\\的情况下没问题,但这种写法不够健壮(比如如果dirname结尾没有反斜杠,就会变成E:A这种错误路径),推荐用Python内置的os.path.join()来处理路径拼接,它会自动适配不同操作系统的路径分隔符。

3. 不必要的嵌套列表

你写了second_level = [next(os.walk(dirname+dir))[1]],这会把二级目录列表再套一层括号(比如变成[['A1','A2']]),其实直接取next(os.walk(...))[1]就能得到二级目录的列表了。


修正后的代码示例

如果你想清晰地打印每个一级目录对应的二级目录,可以用这个版本:

import os  # 别忘了导入os模块,你的原代码里没写这个,运行会报错

dirname = "E:\\"

def walk_method(dirname):
    # 获取E盘下的所有一级目录
    first_level_dirs = next(os.walk(dirname))[1]
    for first_dir in first_level_dirs:
        # 安全拼接一级目录的完整路径
        full_first_path = os.path.join(dirname, first_dir)
        # 获取该一级目录下的二级目录
        second_level_dirs = next(os.walk(full_first_path))[1]
        # 友好打印对应关系
        print(f"一级目录「{first_dir}」的二级目录:{second_level_dirs}")

# 直接调用函数即可,不用再print它的返回值
walk_method(dirname)

如果你想把所有二级目录收集起来返回,而不是逐个打印,可以用这个版本:

import os

dirname = "E:\\"

def walk_method(dirname):
    all_second_level = []
    first_level_dirs = next(os.walk(dirname))[1]
    for first_dir in first_level_dirs:
        full_first_path = os.path.join(dirname, first_dir)
        second_level_dirs = next(os.walk(full_first_path))[1]
        # 把当前一级目录的二级目录加入总列表
        all_second_level.extend(second_level_dirs)
        # 如果想保留一级目录和二级目录的对应关系,可以改成:
        # all_second_level.append({first_dir: second_level_dirs})
    return all_second_level

# 获取结果并打印
result = walk_method(dirname)
print("所有二级目录:", result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:47:31