2012-05-21 58 views
1

我有一個主目錄叫做Forfun。在這個目錄裏面,有7-8個子局,如Test1,Test2,Test3等等。請注意,Forfun中也有一些文件不屬於子版塊。例如,Forfun內有一個.txt文件,與Test1,Test2子目錄處於同一級別。Python子文件夾列表

TestX子目錄被進一步分爲3個子目錄,即:輸入結果參數

我希望能夠列出特定文件夾的所有實例,如輸入

代碼應該遞歸走通整個Forfun目錄和清單,所有它找到輸入結果目錄。

我嘗試使用os.listdir這樣的:

path = '/myfiles/Forfun' 
folders = [f for f in os.listdir(path) if f.endswith('inputs')] 
folders 

但這返回我空列表。希望我解釋清楚問題,謝謝你的幫助。

回答

3

os.listdir()列出提供的目錄中的所有文件和目錄。正如你所經歷的那樣,它不會執行遞歸。它保持在最初提供的目錄的級別上。

爲了遞歸經過一個目錄樹,並通過遍歷所有文件和目錄的某個目錄下的水平,你應該使用Python的os.walk()

import os 

def listdirs(suffix): 
    for dirname, dirnames, filenames in os.walk('.'): 
     for subdirname in dirnames: 
      subdirpath = os.path.join(dirname, subdirname) 
      if subdirpath.endswith(suffix): 
       yield subdirpath 


if __name__ == "__main__": 
    for d in listdirs('inputs'): 
     print d 

我已經設置了相同的目錄結構你一直在提議。這是上面的代碼的輸出:

$ python test.py 
./Test1/inputs 
./Test2/inputs 
+0

'os.walk()'也適用於子文件夾? – dawnoflife

+0

是的,它會... – ThiefMaster

+0

謝謝你的作品! – dawnoflife

1

爲了精確位Jan-Philip的溶液:

>>> import os 
>>> for root, dirs, files in os.walk(path): 
    if 'inputs' in dirs: 
     print os.path.join(root, 'inputs') 

,將列出的子文件夾inputs所有出現。

+0

這段代碼給我一個錯誤:'無效的語法'指向'操作系統。路徑' – dawnoflife

+0

啊,不用在意我的python – dawnoflife

+0

版本中的print()'在if之前應該有一個縮進。這就是爲什麼它給語法錯誤。 – thavan

相關問題