2016-09-10 7 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» в отдельный поток, чтобы графический интерфейс не замерзал за эти 30 секунд. еще раз спасибо!! –

ответ

0

Вы должны использовать scandir, который доступен только с Python 3.

Но есть back port.

Чтобы понять эту проблему, читайте PEP 471.

+0

Это выглядит многообещающе. Я откладываю переход на Python 3, так как я могу обойтись с 2,7, но я думаю, что пришло время сделать переключатель. –

+0

похоже, что нет способа получить время, оставшееся внутри python, но в конечном счете, я хочу сократить это время, и «scandir» должен помочь, поэтому я дам этот ответ ** ** –