在python中创建目录和子目录中所有文件的列表

在python中创建目录和子目录中所有文件的列表,python,map,lambda,python-2.7,directory-listing,Python,Map,Lambda,Python 2.7,Directory Listing,我想提出列出目录及其子目录中所有文件的最佳方法。一旦完成,我想过滤下来。因此,最佳情况下,这将在两行中完成: def getFilesContaining(filename): files = map(lambda x: os.path.join(x, file), os.walk('.')) #Note: this map does NOT work filtered_files = filter(lambda x: filename in x, files) retu

我想提出列出目录及其子目录中所有文件的最佳方法。一旦完成,我想过滤下来。因此,最佳情况下,这将在两行中完成:

def getFilesContaining(filename):
    files = map(lambda x: os.path.join(x, file), os.walk('.')) #Note: this map does NOT work
    filtered_files = filter(lambda x: filename in x, files)
    return filtered_files 
这将返回一个迭代器。在您的版本中,
filter
返回一个列表。如果确实需要列表,请将返回值更改为列表理解,方法是将外圆括号
(…)
替换为方括号
[…]


这将返回一个迭代器。在您的版本中,
filter
返回一个列表。如果您确实想要列表,请将返回值更改为列表理解,方法是将外部括号
(…)
替换为括号
[…]

两行与优化有什么关系?两行与优化有什么关系?太棒了。这正是我想要的。就效率而言,我不确定我是否喜欢三重for循环。这个循环与os.system('find')之类的东西在效率方面有什么不同?哪一个效率更高?我只是在560MB的目录下做了一个小实验,(毫不奇怪)
os.system('find.-typef-name“*a*”)
list(getFilesContaining('a'))快。这正是我想要的。就效率而言,我不确定我是否喜欢三重for循环。这个循环与os.system('find')之类的东西在效率方面有什么不同?哪一个效率更高?我只是在560MB的目录下做了一个小实验,(毫不奇怪)
os.system('find.-typef-name“*a*”)
list(getFilesContaining('a'))快。
def getFilesContaining(filename):
    paths = (os.path.join(root, f) for root, dirs, files in os.walk('.')
             for f in files) 
    return (path for path in paths if filename in path)