Ich habe das herausgefunden.
I verwendet os.listdir eine Liste der Top-Level-Verzeichnisse zu erhalten, und verwenden dann die .split Funktion auf dem Weg, der zurück os.walk, das erste Level-Verzeichnis zurückkehren, die es zur Zeit in war.
Die links ich mit einer Liste von Toplevel-Verzeichnissen, die ich den Index des aktuellen Verzeichnisses von os.walk finden konnte, und vergleichen Sie den Index mit der Länge der Liste zurückgegeben, geben Sie mir ein% abgeschlossen. ;)
Das gibt mir keinen glatten Fortschritt, weil das Niveau der Arbeit, die in jedem Verzeichnis getan wird, schwanken kann, aber das Glätten des Fortschrittsindikators ist für mich keine Sorge. Aber es könnte leicht erreicht werden, indem man den Pfad tiefer in die Verzeichnisstruktur einfügt.
Hier ist der endgültige Code von meinem Fortschritt bekommen:
def locateGameDirs(filelist, root=os.curdir): #Find a list of files, return directories.
toplevel = [folder for folder in os.listdir(root) if os.path.isdir(os.path.join(root, folder))] #List of top-level directories
fileset = set(filelist)
for path, dirs, files in os.walk(os.path.abspath(root)):
curdir = path.split('\\')[1] #The directory os.walk is currently in.
try: #Thrown here because there's a nonexistant(?) first entry.
youarehere = toplevel.index(curdir)
progress = int(((youarehere)/len(toplevel))*100)
except:
pass
for filename in returnMatches(filelist, [k.lower() for k in files]):
yield filename, path + "\\", progress
Und jetzt zum Debuggen ich dies weiter im Code so mache:
for wow in locateGameDirs(["wow.exe", "firefox.exe", "vlc.exe"], "C:\\"):
print wow
Gibt es eine nette kleine Art und Weise diesen Versuch/ausgenommen loswerden? es scheint, die erste Iteration des Pfades gibt mir nichts ...
die eigentliche Frage ist, warum dauert Ihr 'os.walk' so lange? Wie viele Dateien durchwühlst du? Was ist die Leistung der 'returnMatches'? – SilentGhost
def returnMatches (a, b): Rückgabeliste (set (a) & set (b)) # Gibt eine Liste der Übereinstimmungen zwischen den angegebenen Listen zurück. , dass alle returnMatches ist, ist ... das dauert nur ein paar Sekunden dauern, aber ich hinzufüge, polieren, um das Programm so zu Menschen ist es nicht mein Programm aussieht nur ist nichts für ein paar Sekunden zu tun. Auf * MY * Maschine dauert das Ganze etwa 10 Sekunden. Aber das wird verpackt und läuft auf einer beliebigen Anzahl von Windows-Maschinen/Umgebungen – ThantiK
Hinweis zu meinem Rechner: Immer noch ein sehr sehr langsames IDE-Laufwerk. ;) – ThantiK