2016-04-28 11 views
1

Wenn die Datei ein Verzeichnis ist, möchte ich die Funktion recurse. Aber ich würde manchmal einen Generator bekommen, wenn ich als nächstes aufrufe. Gibt es einen Weg, ich kann immer eine Datei bekommen.Datei in einem Pfad generieren, aber manchmal einen Generator zurück

+1

Unrelated: Verwenden Sie 'path = os.path.join (dirpath, Dateiname)' statt 'path = dirpath + "/" + Dateiname' – jfs

Antwort

2

Um Dateien zu generieren, verwenden Sie yield from next_file(file_path) anstelle von yield next_file(file_path), die ein Generatorobjekt erzeugt.

Auf älteren Python-Versionen ohne yield from, Sie eine explizite yield Schleife hier verwenden:

for f in next_file(file_path): 
    yield f 
1

Versuchen

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 gibt einen Generator, so dass, wenn Sie return next_file(file_path) tun, wird der Generator von next_file zurückgegeben wird (statt Wert) ergab, so dass Sie über diesen Generator durchlaufen müssen und yield alle Elemente ein einzeln.

+0

Ich akzeptiere die erste Antwort, danke auch. – midpush

Verwandte Themen