Я понял это.
Я использовал os.listdir для получения списка каталогов верхнего уровня, а затем использовал функцию .split для пути, возвращаемого os.walk, возвращая каталог первого уровня, в котором он находился в настоящее время.
Это оставило меня со списком каталогов верхнего уровня, в котором я мог найти индекс текущего каталога os.walk и сравнить возвращаемый индекс с длиной списка, что дало мне% завершения. ;)
Это не дает мне гладкого прогресса, потому что уровень работы, выполняемой в каждом каталоге, может варьироваться, но сглаживание индикатора прогресса меня не беспокоит. Но это может быть легко достигнуто путем расширения пути проверки глубже в структуру каталогов.
Вот окончательный код получения моего прогресса:
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
И сейчас для целей отладки я делаю это далее в коде:
for wow in locateGameDirs(["wow.exe", "firefox.exe", "vlc.exe"], "C:\\"):
print wow
Есть ли хороший маленький способ избавиться от этой попытки / кроме ?; кажется, первая итерация пути ничего мне не дает ...