Me di cuenta de esto.
que utilizan os.listdir para obtener una lista de directorios de nivel superior, y luego utiliza la función .split en el camino que os.walk regresó, volviendo el primer directorio de nivel que era actualmente.
que dejó con una lista de directorios de nivel superior, que pude encontrar el índice del directorio actual de os.walk, y comparar el índice devuelto con la longitud de la lista, dándome un% completado. ;)
Esto no me da un progreso liso, porque el nivel de trabajo realizado en cada directorio puede variar, pero suavizar el indicador de progreso no me concierne. Pero podría lograrse fácilmente extendiendo la ruta comprobando más profundamente en la estructura del directorio.
Aquí es el código final de conseguir mi progreso:
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
Y en este momento para fines de depuración que estoy haciendo esto más adelante en el código:
for wow in locateGameDirs(["wow.exe", "firefox.exe", "vlc.exe"], "C:\\"):
print wow
¿Hay un poco más agradable para deshacerse de ese intento/excepto ?; parece que la primera iteración de ruta no me da nada ...
la verdadera pregunta es por qué su 'os.walk' tarda tanto tiempo? ¿Cuantos archivos estás tecleando? ¿Cuál es el rendimiento de 'returnMatches'? – SilentGhost
def returnMatches (a, b): lista de devolución (set (a) & set (b)) # Devuelve una lista, de coincidencias entre las listas dadas. Eso es todo returnMatches es ... esto solo toma un par de segundos para completarse pero estoy agregando polaco al programa así que a las personas no parece que mi programa simplemente no haga nada por un par de segundos. En la máquina * MY * todo tarda unos 10 segundos en completarse. Pero esto se va a empaquetar y ejecutar en cualquier cantidad de máquinas/entornos de Windows. – ThantiK
Nota sobre mi máquina: sigue ejecutando una unidad IDE muy lenta. ;) – ThantiK