python - 无论如何提供 os.walk 的进展吗?

标签 python

对于 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/

相关文章:

python - 编译 cython Hello World 示例 : don't know how to compile C/C++ code on platform

python - 此类定义的 C++ 等价物是什么

python - 使用 pandas read_csv 解析时间戳时出错

python - 基于元组的子集 Pandas 数据框

python - 如何在两个日期之间创建字段周

python - 密码保护整个 Django 应用程序

python - jaydebeapi 最新更新至 1.0.0 导致连接错误

python - 如何在 python 中从 json 获取输入的随机回复

python - 每行文本到单词 + Python 中的命名实体标签

python - 无法获得 supervisord 监控进程的输出