Добавление элементов в генераторы Python - PullRequest
17 голосов
/ 21 февраля 2009

Можно ли добавить элементы в генератор питона?

В настоящее время я пытаюсь получить все изображения из набора неорганизованных папок и записать их в новый каталог. Чтобы получить файлы, я использую os.walk (), которая возвращает список файлов изображений в одном каталоге. Хотя я могу сделать генератор из этого единого списка, я не знаю, как объединить все эти списки в один генератор. Любая помощь будет высоко ценится.

Связанный:

Ответы [ 4 ]

19 голосов
/ 21 февраля 2009

Вы ищете itertools.chain. Он объединит несколько итераций в один, например:

>>> for i in itertools.chain([1,2,3], [4,5,6]):
...  print i
... 
1
2
3
4
5
6
14 голосов
/ 21 февраля 2009

Это должно сделать, где 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
4 голосов
/ 21 февраля 2009
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
0 голосов
/ 21 февраля 2009

Вот так.

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

Работает хорошо.

...