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會修復它;這需要測試。)
添加回答
舉報