2015-11-22 30 views
1

什麼是獲得遞歸函數來構建返回列表的好方法?比方說,我有一個功能,像在所有子目錄中生成文件和目錄列表如下:如何構建一個列表的遞歸函數

def print_directory_listing(directory = "."):       
    for file_structure in os.listdir(directory):     
     file_structure_path = os.path.join(directory, file_structure) 
     if os.path.isdir(file_structure_path): 
      print_directory_listing(file_structure_path) 
     else: 
      print(file_structure_path) 

而不是打印出來的一切,我怎麼能修改此返回所有的文件和目錄的列表?例如,是否有一個函數附加文件的全局列表是好事?

請注意,我並不要求有關os.walk;我正在問一個關於Pythonic方法獲得遞歸函數來構建和返回列表的一般性問題。

+1

爲什麼你不使用'os.walk()'這正是爲了這個目的? – Kasramvd

+1

@ Kasramvd你爲什麼不作出回答而不是評論,因爲這絕對是一個答案? –

+0

@Loïc因爲這個問題是重複的。 – Kasramvd

回答

0

感謝您的評論,我認爲了解您的問題的真正目的。如果你看看下面的代碼,你會發現你正在尋找的遞歸,你會看到如何「保存孩子的變量」。

import os 

def print_directory_listing(directory = '.'): 
    files_list=[] 

    for file_structure in os.listdir(directory):     
     file_structure_path = os.path.join(directory, file_structure) 
     if os.path.isdir(file_structure_path): 
      files_list+=print_directory_listing(file_structure_path) 
     else: 
      files_list.append(file_structure_path) 

    return files_list 
+0

謝謝你的解決方案。我的問題不是專門關於創建目錄列表;它是關於如何獲得一個遞歸函數來構建一個列表並返回該列表。 – d3pd

+0

我有一個示例代碼給你,我不能添加一個問題的答案。它已關閉。你會問一個新問題嗎? – ozy

+0

@ d3pd我剛剛更新了我的答案 – rsm