2009-02-21 24 views
15

Öğeleri bir python jeneratörüne eklemek mümkün mü?Python jeneratörlerine eleman ekleme

Şu anda bir dizi dağınık klasörden tüm görüntüleri almaya çalışıyorum ve bunları yeni bir dizine yazdım. Dosyaları almak için tek bir dizinde görüntü dosyalarının listesini döndüren os.walk() kullanıyorum. Bu tek listeden bir jeneratör üretebilirken, tüm bu listeleri tek bir jeneratörde nasıl birleştireceğimi bilmiyorum. Herhangi bir yardım çok takdir edilecektir.

İlgili: Bunun gibi

cevap

13

Bu dizinlerin listeniz nerede directories olduğunu bunu yapmalıdır:

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

İyi çalışıyor.

+0

'itertools.chain (aralık: (i), aralık (j), aralık (k)) ' – jfs

+0

@JF Sebastian: Aralık os.walk (...) olduğunda değil. –

16

itertools.chain ürününü incelemektesiniz. Bunun gibi, bir tek içine birden Iterables birleştirecek:

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

'ss.walk' bağlamında' zinciri'yi nasıl kullanıyorsunuz? – jfs

+0

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