2016-09-10 186 views
2

在Python 2.7中,我使用os.listdir來生成文件夾中的文件列表。有很多文件,我與該文件夾的連接速度很慢,所以完成時間最多可能需要30秒。這裏有一個例子:當os.listdir生成一個列表(剩餘時間)時測量進度(Python)

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)步?

+0

如果'listdir'中的延遲是因爲「你的文件夾連接速度很慢」,這似乎超出了'listdir'或python的範圍。 (大概)網絡強加的延遲是由你的操作系統處理的,並且對python是透明的,所以回答你的問題,不,至少不容易。 – jedwards

+0

想不到一種方法來創建一個可以顯示實際進度的「真實」加載欄。這是可行的,但我只能想到會讓事情放緩的事情。所以我會建議創建一個虛假的加載欄,無論進度如何都會更新。你可以粗略估計它應該多快移動並自行解決。你可以在單獨的線程中運行'listdir'和假加載欄,這樣兩者都可以正確更新。但是,這不是一個真正的答案,只是一個黑客的想法。 – makaveli

+0

謝謝你的回覆。該文件夾位於我有共享連接的服務器上。我無法做任何事情來改善連接,但我會嘗試將'listdir'調用放在一個單獨的線程中,以便GUI在這30秒內不會凍結。再次感謝!! –

回答

0

你應該使用scandir這是唯一可以使用Python 3

但是有一個back port.

要理解這個問題,讀PEP 471

+0

這看起來很有希望。我一直在推遲到Python 3,因爲我可以用2.7來獲得,但我認爲是時候進行切換了。 –

+0

它看起來像沒有辦法讓python中剩下的時間,但最終,我想縮短這個時間,'scandir'應該幫助,所以我會給這個答案**檢查** –