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

Python中自动列出多个目录下所有文件的问题求解

多目录文件列表批量生成解决方案

报错原因说明

  • NotADirectoryError报错:os.listdir(path)会返回目标目录下所有条目,包含子目录和普通文件,未判断条目类型就对普通文件调用os.listdir()会触发该错误。
  • 生成器对象返回问题:os.walk()返回的是迭代生成器,需要遍历生成器才能提取到实际的文件信息,直接将生成器存入列表只会保留生成器对象标识。

实现代码

场景1:仅获取all_dir下一级子目录内的直接文件(无子目录嵌套场景)

import os

path = '../all_dir'
all_list = []

for entry in os.listdir(path):
    entry_path = os.path.join(path, entry)
    # 仅处理子目录条目
    if os.path.isdir(entry_path):
        # 遍历子目录下所有文件添加到总列表
        all_list.extend(os.listdir(entry_path))

如果需要存储文件的完整绝对路径,替换最后一句为:

all_list.extend([os.path.join(entry_path, f) for f in os.listdir(entry_path)])

场景2:子目录存在多层嵌套,需要获取所有层级的文件

直接使用os.walk遍历整个目录树,无需自己循环一级目录:

import os

path = '../all_dir'
all_list = []

for root, dirs, files in os.walk(path):
    # files为当前遍历层级下的所有文件名列表
    all_list.extend(files)

如需存储完整路径,替换最后一句为:

all_list.extend([os.path.join(root, f) for f in files])

可选扩展

如果需要过滤特定类型的文件,比如仅保留.txt后缀的文件,可以在添加时增加判断:

for root, dirs, files in os.walk(path):
    for f in files:
        if f.endswith('.txt'):
            all_list.append(os.path.join(root, f))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:39:04