2015-11-22 31 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