2015-11-26 215 views
0

我需要打開名爲'data'的根文件夾,然後獲取該文件夾中的文件夾列表,然後獲取每個文件夾的路徑並執行一些代碼以檢查這些文件夾內部是一個'docx'文件。For循環未執行

如果僅執行這樣的:

rootDir = 'data' 
for dirName, subdirList, fileList in os.walk(rootDir): 
    if dirName == 'data': 
     pass 
    else: 
     print('Found directory: %s' % dirName) 

至於結果我得到的所有文件夾

Found directory: data/2014 09 Daily Reports 
Found directory: data/2014 11 Daily Reports 
Found directory: data/2014 03 Daily Reports 
Found directory: data/2015 04 Daily Reports 
Found directory: data/2015 03 Daily Reports 
Found directory: data/2015 08 Daily Reports 
Found directory: data/2014 10 Daily Reports 
Found directory: data/2015 07 Daily Reports 
..... 

的列表,但如果我有這樣的:

rootDir = 'data' 
for dirName, subdirList, fileList in os.walk(rootDir): 
    if dirName == 'data': 
     pass 
    else: 
     dirpath = os.path.abspath(dirName) 
     for root, dirs, filenames in os.walk(dirpath): 
      for f in filenames: 
       os.chdir(dirpath) 
       fn = f.replace('\xc3\xab','e') 
       os.rename(f, f.replace('\xc3\xab','e')) 
       if 'docx' in f: 
        print 'docx files are found inside this folder' 
       else: 
        pass 
     print('Found directory: %s' % dirName) 

如果執行此,結果只有這樣:

Found directory: data/2014 09 Daily Reports 

爲什麼for循環不能執行?任何幫助?

+0

我不明白:'os.walk'會自動遍歷'rootDir'中的所有文件或導向器。所有文件,以及子目錄中的文件。你爲什麼想散步散步? – FunkySayu

+1

@FunkySayu也許OP需要在跑步之前學習如何「走路」。 – SuperBiasedMan

+2

看起來你用'os.chdir()'改變了目錄,所以你不再是你想象的那樣。 – kwinkunks

回答

2

發生這種情況是因爲您在循環內執行os.chdir

os.walk不會發現它是在環上一次執行改爲目錄裏面的「數據」目錄下,你需要要麼改變rootDir提供「全/路徑/到/數據」目錄中或嘗試在循環內執行os.chdir("..")以返回上一個目錄。

+0

謝謝你的回答!是否有任何可能,最後在其他條件改變目錄回到我原來的工作目錄? –

+0

是的我猜在第二個嵌套循環外面執行'os.chdir(dirpath)'和'os.chdir(「..」)'應該做這個工作。把它們分別放在它前後。 –

+0

謝謝你解決了我的問題! –