for root, dirs, files in os.walk(rootDir, topdown='true'):
是python脚本中经常使用的东西。只是想知道这里有什么众所周知的方法可以提供进展吗?当您有一个大型文件夹结构时,此 API 可能需要一段时间?
谢谢。
for root, dirs, files in os.walk(rootDir, topdown='true'):
是python脚本中经常使用的东西。只是想知道这里有什么众所周知的方法可以提供进展吗?当您有一个大型文件夹结构时,此 API 可能需要一段时间?
谢谢。
本身无法为您提供walk
进度,因为无法提前知道某个目录树下有多少条目。*
但是,在大多数使用 的程序中walk
,您实际上是在stat
对文件进行操作,这通常比隐式调用花费的时间要长得多。例如,os.walk
在其中抓取我的第一个程序list(os.walk(path))
需要 2.301 秒,而我的实际功能(尽管只对这些文件的一小部分进行操作)需要 139.104 秒。我认为这种事情很典型。
因此,您可以先阅读整个步行过程(例如,使用list(os.walk(path))
),然后使用该信息生成实际工作的进度。
在实际的程序中,您可能希望在执行 时显示带有“正在确定大小...”之类的标签的“不确定进度条” list(os.walk(path))
,然后将其替换为带有“0/12345 文件”的百分比进度条一次完成了。(事实上,我打算将那个不确定的进度条添加到我的程序中,现在我已经想到了这个想法……)
(对于单线程交互式程序,您显然不想只是阻塞;您可以在后台线程中执行此操作并list(os.walk(path))
回调主线程,或者每次通过事件循环等)walk
runLater
* 这不是因为没有文件系统或操作系统可以做这样的事情,只是因为他们没有. 显然会有一些折衷——例如,如果您必须遍历整个树的更新计数,则创建和删除大量小文件会慢很多。Classic Mac 过去通过在 Finder 信息中保留缓存计数来解决这个问题……这很棒,除了这意味着调用可能需要 1us 或 1min 才能返回,而无法提前预测(或中断它)以编程方式。