列出包含路径(Python)的目录和子目录中的所有文件

时间:2014-04-23 16:03:42

标签: python

有很多像这样的问题,我实际上找到了一种方法来做到这一点

for root, dirs, files in os.walk(".", topdown=False):
    for name in files:
        (os.path.join(root, name))

但是如何将所有这些放在一个列表中?我希望该函数返回包含所有路径的单个列表,我该怎么做?

3 个答案:

答案 0 :(得分:1)

作为列表理解,它就像:

一样简单
filelist = [os.path.join(root, name) for root, dirs, files in os.walk(".", topdown=False) for name in files]

对于延迟评估,您可以将其转换为生成器:

import os

filelist_gen = (os.path.join(root, name) for root, dirs, files in os.walk(".", topdown=False) for name in files)

for i, f in enumerate(filelist_gen):
    if i >= 3:
        break
    print(f)

如果您可能不会遍历整个文件列表,则应使用此方法。列表解析会在访问第一个项目之前创建所有文件的列表。

答案 1 :(得分:1)

只需声明一个空列表:

items = []

然后append到最后:

for name in files:
    items.append(os.path.join(root, name))

答案 2 :(得分:0)

一般来说,如果你有类似的东西:

for x in y:
    some more stuff:
        foo # I have an item here!!

有两种方法。

天真的做法是立即将其全部列入清单:

def all_in_a_list():
    things = []

    for x in y:
        some more stuff:
            things.append(foo) # I have an item here!!

    return things

更多Pythonic方法是制造发电机

def all_things():
    for x in y:
        some more stuff:
            yield foo # I have an item here!!

并将其转到列表,如果需要在呼叫站点:

list(all_things())