2016-04-28 1 views
1
def next_file(path): 
    ''' 
    generator file in the path 
    ''' 
    flist = os.listdir(path) 
    for fname in flist: 
     file_path = path + "/" + fname 
     if os.path.isfile(file_path): 
      yield file(file_path) 
     else: 
      yield next_file(file_path) 

ファイルがdirの場合、この関数を再帰します。 しかし、私は次回起動時にジェネレータを取得することがあります。 私はいつもファイルを得ることができる方法はありますか?パスにファイルを生成しますが、ときどきジェネレータが返されます

+1

無関係: 'パス= os.path.join(DIRPATH、ファイル名)を使用する代わりに' 'パスの= DIRPATH + "/" + filename' – jfs

答えて

2

ファイルを生成するには、yield next_file(file_path)の代わりにyield from next_file(file_path)を使用してジェネレータオブジェクトを生成します。 yield fromのない古いバージョンのPythonで

、あなたはここに明示的にyieldループを使用することができます。

for f in next_file(file_path): 
    yield f 
1

def next_file(path): 
    ''' 
    generator file in the path 
    ''' 
    flist = os.listdir(path) 
    for fname in flist: 
     file_path = path + "/" + fname 
     if os.path.isfile(file_path): 
      yield file(file_path) 
     else: 
      for f in next_file(file_path): 
       yield f 

next_fileは、発電機を返すので、あなたがreturn next_file(file_path)を行うときに、その発電機とyieldすべての要素の1を反復する必要があるので、next_fileによって返された発電機は、(値の代わりに)を得たされて試してみてください一つ。

+0

私は最初の答えを受け入れます、ありがとう。 – midpush

関連する問題