2014-06-19 41 views
1

我寫了一些東西去除文件名中的特殊字符。但它只包含一個文件夾,而不是它的子文件夾。我如何在子文件夾和子文件夾等中執行此操作?進入子文件夾(python)

import os 
import re 

def dir_list2(directory, *args): 

    fileList = [] 
    content = os.listdir(directory) 

    for file in content : 

     dirfile = os.path.join(directory, file) 
     if os.path.isfile(dirfile): 
      if len(args) == 0: 
       fileList.append(dirfile) 
      else: 
       if os.path.splitext(dirfile)[1][1:] in args: 
        fileList.append(dirfile) 

     print "##################################################" 

     print "Old filename:", file 

     filename = file 
     remove = re.compile("[^.a-zA-z0-9_]") 
     output = remove.sub('_', filename) 

     newfile = directory + "/" + output 
     os.rename(dirfile, newfile) 

     print "Corrected filename:", output 
     #Removes Special Characters 


    return fileList 

if __name__ == '__main__': 


    fileList = dir_list2('/path/') 
+1

您可能需要使用[os.walk(https://docs.python.org/2/library/os.html#os.walk)而不是'os.listdir' – J0HN

回答

2

嘗試使用os.walk,而不是os.listdir,它可以讓你通過一個文件夾,它的文件和子文件夾等行走。

編輯你的代碼,如:

content = os.walk(directory) 

for dirpath, dirnames, filenames in content: 
    for file in filenames: 
     dirfile = os.path.join(dirpath, file) 

     # The rest of your code 
+0

,我該怎麼做到這一點? – AHFHenry

+0

感謝您發表我的評論作爲答案。 -1不添加任何東西(例如代碼示例,listdir和walk之間的差異等) – J0HN

+0

對不起@ J0HN我實際上正在寫我的答案沒有看到您的評論,我會刪除我的答案,如果你想:) – mpcabd