2009-02-21 7 views
15

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

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

Похожие:

ответ

13

Это должно сделать это, где 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 
+5

'chain.from_iterable (imap (os.walk, каталоги))' – jfs

4
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 

Хорошо работает.

+0

'itertools.chain (диапазон (я), диапазон (j), диапазон (k)) ' – jfs

+0

@JF Себастьян: Не когда диапазон os.walk (...). –

16

Вы ищете itertools.chain. Он сочетает в себе несколько итерируемых в один, как это:

>>> for i in itertools.chain([1,2,3], [4,5,6]): 
... print i 
... 
1 
2 
3 
4 
5 
6 
+0

Как вы используете 'chain' в контексте' os.walk'? – jfs

+0

@ J.F.Sebastian: цепочка (os.walk ("."), Other_generator) '. –