2009-02-21 7 views
15

Ist es möglich, Elemente an einen Python-Generator anzuhängen?Hinzufügen von Elementen zu Python-Generatoren

Ich versuche derzeit, alle Bilder aus einer Gruppe von ungeordneten Ordnern zu erhalten und sie in ein neues Verzeichnis zu schreiben. Um die Dateien zu erhalten, verwende ich os.walk(), die eine Liste von Bilddateien in einem einzigen Verzeichnis zurückgibt. Während ich aus dieser Liste einen Generator machen kann, weiß ich nicht, wie ich all diese Listen zu einem einzigen Generator kombinieren soll. Jede Hilfe würde sehr geschätzt werden.

Verwandte:

Antwort

13

Dies sollte es tun, wo directories ist die Liste der Verzeichnisse:

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

Like this.

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 

Funktioniert gut.

+0

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

+0

@JF Sebastian: Nicht wenn der Bereich os.walk (...) ist. –

16

Sie suchen nach itertools.chain. Es wird mehrere Iterables zu einem einzigen kombinieren, wie folgt aus:

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

Wie benutzt man 'chain' im Kontext von' os.walk'? – jfs

+0

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