2014-07-10 77 views
0

我試圖在遞歸函數中使用os.walk()來遞歸地遍歷整個目錄並重命名文件(只是在給定路徑中大寫所有文件的名稱) 。我的(簡單)的代碼是在這裏:Python:在遞歸函數中的os.walk()

def recursiveRename(path): 
    """ This uses the os.walk function to walk through a directory """ 
    rename(path) 
    for root, sub, files in os.walk(path): 
     i = 0 
     print (sub) 
     while(i < len(sub)): 
      print (os.path.join(path, sub[i])) 
      recursiveRename(os.path.join(path, sub[i])) 
      i+=1 

它輸出這樣的:

['one', 'two'] 
/Users/name/Desktop/test/one 
['four', 'three'] 
/Users/name/Desktop/test/one/four 
[] 
/Users/name/Desktop/test/one/three 
[] 
[] 
[] 
/Users/name/Desktop/test/two 
[] 
['four', 'three'] 
/Users/name/Desktop/test/four 

這將重命名的所有文件罰款,但它試圖最後一個目錄不存在(有中沒有子文件夾/測試/ 2)。我可以抓住這個錯誤,但是我覺得我的邏輯有點不對,我寧願把它弄清楚。

回答

3

os.walk()已經遞歸通過你的目錄,你不需要遞歸再次

移動rename(path)到您的循環,而不是:

for root, sub, files in os.walk(path): 
    rename(root) 
+0

咄。謝謝你清理那個。 – chris