2009-02-21 25 views
15

Czy można dołączyć elementy do generatora pythonów?Dodawanie elementów do generatorów pytonów

Obecnie próbuję uzyskać wszystkie obrazy z zestawu zdezorganizowanych folderów i zapisać je w nowym katalogu. Aby uzyskać pliki, używam os.walk(), który zwraca listę plików obrazów w jednym katalogu. Chociaż mogę utworzyć generator z tej pojedynczej listy, nie wiem jak połączyć wszystkie te listy w jeden generator. Każda pomoc byłaby bardzo cenna.

pokrewne:

Odpowiedz

13

To powinno wystarczyć, gdzie directories jest lista katalogów:

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, katalogi))' – 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

jak ten.

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 

Działa dobrze.

+0

'itertools.chain (zakres (i), zakres (j), zakres (k)) ' – jfs

+0

@JF Sebastian: Nie, kiedy zasięg to os.walk (...). –

16

Szukasz itertools.chain. Będzie łączyć wiele iterables w jeden, tak:

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

Jak używać 'łańcucha' w kontekście' os.walk'? – jfs

+0

@ J.F.Sebastian: 'chain (os.walk (". "), Other_generator)'. –