2014-12-04 48 views
1

我想寫一個簡單的函數,它返回一個目錄及其子目錄中的文件列表。我無恥地從另一個SO海報中偷走了這個功能的大部分。我正在使用Python 2.6.4。變插值似乎不起作用

def getFiles(Asite): 
    # returns a list of config files 
    from os import listdir 
    from os.path import isfile, join 
    mypath = '/etc/config/' + Asite 
    print mypath 
    files = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ] 
    return files 

該函數只是返回一個空列表[]。看起來mypath變量沒有被listdir()isfile()函數插值。在任何人詢問之前,是的,我已經證實其中的文件實際上位於mypath。爲什麼我的files數組爲空?

+0

「內插」在這種情況下意味着什麼? – Kevin 2014-12-04 19:41:56

+1

爲什麼不使用'os.walk'函數獲取所有文件?因爲'os.listdir'只有一個級別 – abhishekgarg 2014-12-04 19:42:29

+0

也許我錯誤地使用了「插值」,但我的意思是listdir()和join()應該使用mypath變量的值,而不是字符串'mypath'。 – user3155618 2014-12-04 19:44:19

回答

0

謝謝大家的有用評論。事實證明,我搜索的目錄中只有索引,但不包含文件。所以os.listdir()不能用於搜索子目錄,因爲它只能進入一個級別(謝謝abhishekgarg)。我結束了使用下面的代碼,這很好(我也發現了這個,並修改了一下)。

def getFiles(Asite): 
    # returns a list of config files 
    files = [] 
    mypath = '/share/profile/base/sol-10-sparc-base/config/' + Asite 
    for dirname, dirnames, filenames in os.walk(mypath): 
      for filename in filenames: 
        pfile = os.path.join(dirname, filename) 
        files.append(pfile[len(mypath):]) 
    return files