2017-12-02 61 views
0

我想對於可以走一個目錄,返回遞歸文件步行只打算一個深度下跌

我有多層文件夾的麻煩中的所有文件分配創建代碼,如

文件夾1
--->文件夾2
-------> foo.txt的

我有以下代碼

def find_larger(path, max_n_results=10): 
    files = [] 
    print(path) 
    path_files = os.listdir(path) 
    for file in path_files: 
     if os.path.isdir(file): 
      files += find_larger(os.path.join(path, file)) 
     files.append(file) 
    return files 

print(find_larger('.')) 

但是,如果我要運行的代碼,我會得到以下結果

[文件夾1,文件夾2]

我曾經使用過此運行是一個調試器和程序未檢測到第二目錄實際上是一個目錄。

我該如何讓程序一路走過目錄。

注意,我不允許用戶os.walk

回答

5

os.path.isdir()需要一個完整的路徑,你只給它相對名稱。首先創建路徑,然後測試:

def find_larger(path, max_n_results=10): 
    files = [] 
    print(path) 
    path_files = os.listdir(path) 
    for file in path_files: 
     subpath = os.path.join(path, file) 
     if os.path.isdir(subpath): 
      files += find_larger(subpath) 
     files.append(subpath) 
    return files 

但是,您要重新發明了這裏的車輪上,只是用os.walk() function列出目錄內容:

def find_larger(path, max_n_results=10): 
    files = [] 
    print(path) 
    for dirpath, dirnames, filenames in os.walk(path): 
     files += (os.join(dirpath, filename) for filename in filenames) 
    return files 
+0

不能使用os.walk,但這個解決方案效果很好:) –