向Python生成器添加元素

29

如何向Python生成器中追加元素?

我目前正在尝试从一组杂乱的文件夹中获取所有图像,并将它们写入新目录。为了获取这些文件,我使用os.walk()函数返回单个目录中的图像文件列表。虽然我可以将此单个列表转换为生成器,但我不知道如何将所有这些列表组合成一个单一的生成器。非常感谢您的帮助。

相关资料:

4个回答

33

你正在寻找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 - jfs
@J.F.Sebastian: chain(os.walk("."), other_generator). @J.F.Sebastian: chain(os.walk("."), other_generator) - sshine

19

这应该就可以了,其中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

9
chain.from_iterable(imap(os.walk, directories)) 翻译为:将 directories 中的目录递归遍历,返回所有文件路径的迭代器。 - jfs

5
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

-1

像这样。

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

运行良好。


1
itertools.chain(range(i), range(j), range(k)) - jfs
@J.F. Sebastian:当范围是os.walk(...)时不行。 - S.Lott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接