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

使用os.walk()遍历目录创建文件夹时触发文件名过长OSError的原因排查

异常出现的根本原因

os.walk 的遍历特性触发无限递归

os.walk 默认采用自顶向下的遍历逻辑,执行到任意层级目录时,会实时读取当前路径下的子目录列表,不会提前缓存初始扫描阶段的全量目录树。遍历过程中新建的目录,会被os.walk自动纳入后续的遍历流程,不受初始目录结构的限制。

对应你的代码,无限嵌套的完整执行流程为:

  • 遍历到./2013/2/路径时,读取到该目录下的子目录为ANAR
  • 代码识别到ANAR为非数字命名,计算待创建路径为./2013/2/ANAR/ANAR,检测到路径不存在,通过os.mkdir执行创建操作
  • 当前层目录处理完成后,os.walk下钻进入./2013/2/ANAR/路径继续遍历,读取到该目录下的子目录为上一步刚创建的ANAR
  • 代码重复执行识别、计算路径、创建目录的逻辑,生成./2013/2/ANAR/ANAR/ANAR
  • 不断重复下钻、新建目录的循环,直到路径长度超过系统允许的上限,触发“文件名过长”的OSError

代码逻辑超出初始处理范围

你的初始需求是针对原有目录结构中存在的最内层非数字目录(即初始结构中的2013/1/ANAR、2013/2/ANAR)执行目录创建操作,但os.walk会将遍历过程中新建出来的ANAR目录也判定为待处理目标,对每一层新生成的ANAR都重复执行创建逻辑,最终形成无限嵌套的目录结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 21:15:00