【问题标题】:measure progress (time left) while os.listdir is generating a list (Python)在 os.listdir 生成列表时测量进度(剩余时间)(Python)
【发布时间】:2017-01-18 16:34:56
【问题描述】:

在 Python 2.7 中,我使用 os.listdir 生成文件夹中的文件列表。有很多文件,我与文件夹的连接速度很慢,因此可能需要 30 秒才能完成。这是一个例子:

import os
import time

start_time = time.time()
dir_path = r'C:\Users\my_name\Documents\data_directory'   #example path
file_list = os.listdir(dir_path)

print 'it took', time.time() - start_time, 'seconds'

这是针对我正在开发的 Tkinter GUI 的,我想制作一个状态栏,显示此步骤剩余多少时间或百分比,这需要很长时间(大约 30 秒)。

有没有办法显示完成file_list = os.listdir(dir_path)步骤的剩余时间或百分比???

【问题讨论】:

  • 如果listdir 的延迟是因为“您与文件夹的连接速度很慢”,这似乎超出了listdir 或一般python 的范围。 (大概)网络施加的延迟由您的操作系统处理并对 python 透明,因此要回答您的问题,不,至少不容易。
  • 想不出一种方法来创建一个显示实际进度的“真实”加载栏。这是可行的,但我只能想到会真正减慢速度的事情。所以我建议创建一个假的加载栏,无论进度如何,它都会自行更新。您可以粗略估计它应该移动的速度并自己计算出来。您可以在单独的线程中运行listdir 和假加载栏,以便正确更新两者。但是,是的,这不是一个真正的答案,只是一个骇人听闻的想法。
  • 感谢您的回复。该文件夹位于与我有共享连接的服务器上。我无法做任何事情来改善连接,但我会尝试将“listdir”调用放在单独的线程中,这样 GUI 就不会在这 30 秒内冻结。再次感谢!

标签: python tkinter operating-system listdir


【解决方案1】:

你应该使用scandir,它只在 Python 3 中可用。

但是有一个back port.

要了解问题,请阅读PEP 471

【讨论】:

  • 这看起来很有希望。我一直在推迟切换到 Python 3,因为我可以使用 2.7,但我认为是时候进行切换了。
  • 看起来没有办法让python中剩下的时间,但最终,我想缩短这个时间,'scandir'应该会有所帮助,所以我会给这个答案检查
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
相关资源
最近更新 更多