2012-10-30 100 views
1

我有一些代碼看起來在一個文件夾,並拉出文件。 但現在文件夾結構已經改變,我需要拖動文件夾尋找匹配的文件。os.walk通過文件夾結構抓取

什麼舊的代碼看起來像

GSB_FOLDER = r'D:\Games\Gratuitous Space Battles Beta' 

def get_module_data(): 
    module_folder = os.path.join(GSB_FOLDER, 'data', 'modules') 

    filenames = [os.path.join(module_folder, f) for f in 
        os.listdir(module_folder)] 

    data = [parse_file(f) for f in filenames] 

    return data 

但現在的文件夾結構發生了變化是這樣

  • GSB_FOLDER \ DATA \模塊
    • \文件夾1 \ DATA \模塊
    • \ folder2 \ data \ modules
    • \ folder3 \ data \ modules

其中folder1,2或3,可以是任意的文本字符串

我如何改寫上面的代碼來做到這一點... 我一直告訴os.walk但我m剛剛學習Python ...所以任何幫助表示讚賞

+1

喜歡這個遊戲 – will

回答

2

沒有太大的變化,你只需要調用os.walk它會遞歸地通過目錄並返回文件例如

for root, dirs, files in os.walk('/tmp'): 
    if os.path.basename(root) != 'modules': 
     continue 
    data = [parse_file(os.path.join(root,f)) for f in files] 

這裏我只檢查名爲'modules'的文件夾中的文件,您可以更改該檢查以執行其他操作,例如,它具有模塊路徑某處root.find('/modules') >= 0

+0

有沒有辦法,只包括名爲模塊的文件夾。 –

+0

@MatGritt看到變化,你可以根據根路徑做過濾 –

+0

甜蜜的謝謝 –

0

您可以使用os.walk像@Anurag有詳細的,或者你可以試試我的小pathfinder庫:

data = [parse_file(f) for f in pathfinder.find(GSB_FOLDER), just_files=True] 
0

os.walk是一個很好的簡單的方法來得到一切的目錄結構在你通過它的目錄裏面;

在你的榜樣

,你可以做這樣的事情:

for dirpath, dirnames, filenames in os.walk("...GSB_FOLDER"): 
    #whatever you want to do with these folders 
    if "/data/modules/" in dirpath: 
    print dirpath, dirnames, filenames 

嘗試了這一點,應該是相當自我解釋它是如何工作...