воскресенье, 23 января 2011 г.

Python:загружаем файлы и информируем пользователя о прогрессе операции

       Есть в Python такой модуль urllib2 это высокоуровневый интерфейс к  библиотекам Python, работающим с протоколами HTTP,FTP и так далее. Передо мной встала необходимость реализовать возможность загрузки файла средствами этой библиотеки. Поэтому я определил такую функцию:
def Load(lpath,path):
        percent=10#процент загрузки файла
        myfile=open(lpath,'wb')#итак как в моем случае будут сохранять бинарные данные, то 
 #открываем в бинарном режиме на запись                   
        f=urllib2.urlopen(path)#открываем целевой URL 
        meta=f.info()#получаем информацию об URL (точнее заголовки в виде словаря)
        remotesize=meta['Content-Length'] #получаем размер из ключа Content-Length 
        print remotesize 
        blocksize = int(remotesize)/10.0 # определяем в байтах сколько составляет 10% 
        while 100>=percent:#пока загружено менее или ровно 100%.....
           myfile.write(f.read(blocksize ))#записываем блок данных размером blocksize, прочитанный #объектом f  
           print 'получено %d  процентов файла'%(percent)
           percent=percent+10
       myfile.close() #закрываем файл 
     Открывая URL библиотека urllib2 возвращает нам объект,имитирующий файл. Если мы вызовем read без параметров, то будет считан сразу весь объект, однако это может быть длительный процесс(все зависит от размера файла). Естественно перед использованием импортируйте модуль urllib2 в  вашу программу           

Комментариев нет:

Отправить комментарий