【发布时间】:2010-10-08 23:34:03
【问题描述】:
是否可以将元素附加到 python 生成器?
我目前正在尝试从一组杂乱无章的文件夹中获取所有图像并将它们写入新目录。为了获取文件,我使用 os.walk() 来返回单个目录中的图像文件列表。虽然我可以从这个单一列表中创建一个生成器,但我不知道如何将所有这些列表组合成一个单一的生成器。任何帮助将不胜感激。
相关:
【问题讨论】:
是否可以将元素附加到 python 生成器?
我目前正在尝试从一组杂乱无章的文件夹中获取所有图像并将它们写入新目录。为了获取文件,我使用 os.walk() 来返回单个目录中的图像文件列表。虽然我可以从这个单一列表中创建一个生成器,但我不知道如何将所有这些列表组合成一个单一的生成器。任何帮助将不胜感激。
相关:
【问题讨论】:
def files_gen(topdir='.'):
for root, dirs, files in os.walk(topdir):
# ... do some stuff with files
for f in files:
yield os.path.join(root, f)
# ... do other stuff
for f in files_gen():
print f
【讨论】:
像这样。
def threeGens( i, j, k ):
for x in range(i):
yield x
for x in range(j):
yield x
for x in range(k):
yield x
效果很好。
【讨论】:
itertools.chain(range(i), range(j), range(k))
您正在寻找itertools.chain。它将多个可迭代对象组合成一个,如下所示:
>>> import itertools
>>> for i in itertools.chain([1,2,3], [4,5,6]):
... print(i)
...
1
2
3
4
5
6
【讨论】:
os.walk的上下文中使用chain?
chain(os.walk("."), other_generator).
应该这样做,directories 是您的目录列表:
import os
import itertools
generators = [os.walk(d) for d in directories]
for root, dirs, files in itertools.chain(*generators):
print root, dirs, files
【讨论】:
chain.from_iterable(imap(os.walk, directories))