2009-02-21 9 views
15

¿Es posible agregar elementos a un generador de pitón?Agregar elementos a los generadores de pitón

Actualmente estoy tratando de obtener todas las imágenes de un conjunto de carpetas desorganizadas y escribirlas en un nuevo directorio. Para obtener los archivos, estoy usando os.walk() que devuelve una lista de archivos de imagen en un solo directorio. Si bien puedo hacer un generador de esta lista única, no sé cómo combinar todas estas listas en un solo generador. Cualquier ayuda sería muy apreciada.

relacionadas:

Respuesta

13

Esto debe hacerlo, donde directories es su lista de directorios:

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

gusta esta.

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 

Funciona bien.

+0

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

+0

@JF Sebastian: No cuando el rango es os.walk (...). –

16

Está buscando itertools.chain. Se combinará múltiples iterables en uno solo, de esta manera:

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

¿Cómo se usa 'chain' en el contexto de' os.walk'? – jfs

+0

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

Cuestiones relacionadas