2 回答

TA贡献1829条经验 获得超9个赞
(请注意,调用签名为os.walk:
os.walk = walk(top, topdown=True, onerror=None, followlinks=False)
所以你正在通过True, None, 和False.)
问题与os.walk遍历目录和文件的顺序以及它进入哪些目录和文件有关。
特别是,它首先读取位于 的目录path。这会产生以下结果:
['Template', 'TemplateTest', 'Config']
所有这些都是目录,因此它下次将遍历的子目录列表是相同的,并且没有文件。这在第一次迭代中作为三个值返回:
path
['Template', 'TemplateTest', 'Config']
[]
然后,您执行自己的代码,在其中调用os.renameon Template,以便现在将其命名为MyApp,然后调用on ,以便现在TemplateTest将目录命名为MyAppTest。
接下来,os.walk代码尝试读取子目录Template。这失败了,所以什么也没有发生(onerror是None)。
接下来,os.walk代码尝试读取子目录TemplateTest。这失败了,所以什么也没有发生。
最后,os.walk代码尝试读取子目录Config。这成功了,一切顺利。
有两种不同的解决方案:您可以设置topdown为False,或者您可以更新已命名的列表,dirs以便os.walk知道目录的新名称。(编辑:我不确定topdown=False会修复它;这需要测试。)
添加回答
举报