2014-04-23 98 views
0

有很多像這樣的問題,其實我已經找到了一種方法來做到這一點清單與目錄和子目錄與路徑(Python)的所有文件

for root, dirs, files in os.walk(".", topdown=False): 
    for name in files: 
     (os.path.join(root, name)) 

但如何把所有這些一個單子?我希望該函數能夠返回包含所有路徑的單個列表,我該怎麼做?

filelist = [os.path.join(root, name) for root, dirs, files in os.walk(".", topdown=False) for name in files] 

懶惰的評價,你可以把它變成一臺發電機:

import os 

filelist_gen = (os.path.join(root, name) for root, dirs, files in os.walk(".", topdown=False) for name in files) 

for i, f in enumerate(filelist_gen): 
    if i >= 3: 
     break 
    print(f) 

你應該使用這個方法,如果你很可能會

+0

可能重複的[獲取所有subd列表當前目錄中的目錄](http://stackoverflow.com/questions/973473/getting-a-list-of-all-subdirectories-in-the-current-directory) – abhi

+0

你可以簡單地加入你的2個循環 – njzk2

回答

1

只需要聲明一個空列表:

items = [] 

,然後append它在最後:

for name in files: 
    items.append(os.path.join(root, name)) 
+0

這麼簡單:) 非常感謝! – Mereketh

1

作爲一個列表理解,因爲它是那麼容易不會遍歷整個文件列表。列表理解將在訪問第一個項目之前創建所有文件的列表。

0

在一般情況下,如果你有這樣的:

for x in y: 
    some more stuff: 
     foo # I have an item here!! 

有是兩種方法。

天真的方法是立即堅持這一切在一個列表:

def all_in_a_list(): 
    things = [] 

    for x in y: 
     some more stuff: 
      things.append(foo) # I have an item here!! 

    return things 

一個更Python的方法是讓一臺發電機

def all_things(): 
    for x in y: 
     some more stuff: 
      yield foo # I have an item here!! 

,並把它轉化爲一個列表如果需要的話在呼叫站點:

list(all_things()) 
相關問題