2016-08-22 2 views
0

Ich habe eine Funktion, um eine Liste von Dateien und Ordnern in einem bestimmten Ordner (mit recurse und nur Dateien erhalten Optionen) oder nur die Datei in einer Liste, wenn der angegebene Pfad ist nicht Ordner:Rückgabeliste aus einer Schleife mit Lambda

def path_to_list(path, onlyFiles = False, recurse = False): 
    if os.path.isdir(path): 
     if onlyFiles: 
      if recurse: 
       result = [] 
       for dirs in list(os.walk(path)): 
        result.append(dirs[2]) 
       return result 
      else: 
       return next(os.walk(path))[2] 
    else: 
     return list(os.walk(path)) if recurse else next(os.walk(path)) 

    return [path] 

Der Versuch, diesen Teil zu verkürzen:

result = [] 
for dirs in list(os.walk(path)): 
    result.append(dirs[2]) 
return result 

ich versuchte Lambda mit mehreren Syntaxen zu verwenden, haben aber keinen Erfolg bekam. Wie gebe ich das Ergebnis direkt aus der for-Schleife zurück? Vielen Dank.

+0

'result = [Verz [2] für dirs in Liste (os.walk (Pfad))]' oder einfach 'return [Verz [2] Verzeichnisse in der Liste (os.walk (Pfad))] '. Sie scheinen zu wissen, wie man programmiert, also schauen Sie sich die Listenergänzungen –

+0

an, was passiert, wenn 'onlyFiles = False' der Standardwert ist? Es scheint nicht, dass dies korrekt behandelt wird –

+0

@ Ev.Kounis scheint OK. Ich habe '' [dirs [2] für dirs in der Liste (os.walk (Pfad)) '' ohne Klammern vorher versucht, die nicht funktionierte. Hier ist das Ergebnis mit 'onlyFiles' und' recurse': [['01 .opus ', '02 .opus', '03 .opus ', '04 .opus', '05 .opus '], [' 1.opus ']] – an01

Antwort

0

Sie können Verzeichnisliste zurückkehren, indem Sie:

return [dir for _, _, dir in list(os.walk(path))] 
Verwandte Themen