将元素添加到 python 生成器

Posted

技术标签:

【中文标题】将元素添加到 python 生成器【英文标题】:Adding elements to python generators 【发布时间】:2010-10-08 23:34:03 【问题描述】:

是否可以将元素附加到 python 生成器?

我目前正在尝试从一组杂乱无章的文件夹中获取所有图像并将它们写入新目录。为了获取文件,我使用 os.walk() 来返回单个目录中的图像文件列表。虽然我可以从这个单一列表中创建一个生成器,但我不知道如何将所有这些列表组合成一个单一的生成器。任何帮助将不胜感激。

相关:

Flattening a shallow list in python

【问题讨论】:

【参考方案1】:
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

【讨论】:

【参考方案2】:

像这样。

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)) @J.F. Sebastian:范围为 os.walk(...) 时不会。【参考方案3】:

您正在寻找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 @J.F.Sebastian: chain(os.walk("."), other_generator).【参考方案4】:

应该这样做,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))

以上是关于将元素添加到 python 生成器的主要内容,如果未能解决你的问题,请参考以下文章

将主机属性添加到生成的 DOM 元素

将 jQuery 验证规则添加到动态生成的表单元素时出错

如何将动态生成的pdf文件添加到zipfile Python?

Mootools:如何将点击功能绑定到以编程方式生成的元素

Python生成器

iOS - Interface Builder - 将元素作为子视图添加到 UIView