2009-02-21 11 views
15

要素をpythonジェネレータに追加することはできますか?pythonジェネレータに要素を追加する

私は現在、一連の混乱したフォルダからすべての画像を取得し、新しいディレクトリに書き込もうとしています。ファイルを取得するには、os.walk()を使用して、単一のディレクトリにイメージファイルのリストを返します。この1つのリストからジェネレータを作ることはできますが、これらのリストをすべて1つのジェネレータに結合する方法はわかりません。どんな助けでも大歓迎です。

関連:このように

答えて

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、directories))' – 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(範囲(I)、範囲は(j)、範囲(k)) ' – jfs

+0

@ JF Sebastian:範囲が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

'os.walk'のコンテキストで' chain'をどのように使いますか? – jfs

+0

@ J.F.Sebastian: 'チェーン(os.walk("。 ")、other_generator)'。 –

関連する問題