有很多像这样的问题,我实际上找到了一种方法来做到这一点
for root, dirs, files in os.walk(".", topdown=False):
for name in files:
(os.path.join(root, name))
但是如何将所有这些放在一个列表中?我希望该函数返回包含所有路径的单个列表,我该怎么做?
答案 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())