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
相关产品推荐
相关产品推荐

