我想通了。
我使用 os.listdir 获取顶级目录列表,然后在 os.walk 返回的路径上使用 .split 函数,返回它当前所在的第一级目录。
这给我留下了一个顶级目录列表,我可以找到 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
有没有一个很好的小方法来摆脱这种尝试/除外?似乎路径的第一次迭代没有给我任何东西......