对于 os.walk(rootDir, topdown='true') 中的 root、dirs、文件:
是 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
进行一次迭代其余的每次通过事件循环等)
* 这并不是因为没有文件系统或操作系统可以做这样的事情,只是因为它们不。显然会有一些权衡,例如,如果您必须遍历整个树更新计数,创建和删除大量小文件会慢很多。经典 Mac 曾经通过在 Finder 信息中保存缓存计数来解决这个问题……这很棒,但它意味着一个调用可能需要 1 秒或 1 分钟才能返回,而无法提前预测(或中断它)以编程方式。
关于python - 无论如何提供 os.walk 的进展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14968441/