python實現檔案下載(包含進度條顯示,檔案大小顯示,下載速度顯示)
不多說了,直接上程式碼記錄:
#!/usr/bin/lgy #-*-coding:utf-8-*- import urllib2,threading from PyQt4.QtGui import * from PyQt4.QtCore import * from push_progress import * from time import time # 暫時沒用到 多執行緒任務下載用到 lock = threading.RLock() class UpdateWidget(QWidget): def __init__(self,parent=None): super(UpdateWidget,self).__init__(parent) self.url = "" self.buffer = 10000 self.start_size = 0 self.end_size = 0 self.fobj="" self.progress=QProgressBar() self.connect(self,SIGNAL("Getproess(float)"),self.ceshi2) self.size_layout=QHBoxLayout() self.sizetotal=QLabel() self.connect(self,SIGNAL("Getsizetotal(int)"),self.ceshi3) #接收 self.sizenow=QLabel() self.connect(self,SIGNAL("Getsizenow(int)"),self.ceshi4) self.size_layout.addWidget(self.sizenow) self.size_layout.addWidget(self.sizetotal) self.size_layout.addStretch(1) self.speedlabel=QLabel() self.speedlabel.setText("50 kb/s") self.connect(self,SIGNAL("Getspeed(float)"),self.ceshi) self.main_layout=QVBoxLayout() self.main_layout.addWidget(self.progress) self.main_layout.addLayout(self.size_layout) self.main_layout.addWidget(self.speedlabel) self.setLayout(self.main_layout) self.download() self.resize(320,160) def download(self): url='http://down.360safe.com/se/360se7.3.0.146.exe' t = threading.Thread(target=self.main,args=(url, 1, 'c:/360.exe',10000)) t.setDaemon(True) t.start() def ceshi(self,i): speed=round(i,2) #判斷Mb,Kb if speed>=1000: mbspeed=round(speed/1000,2) self.speedlabel.setText("{0} Mb/s".format(mbspeed)) else: self.speedlabel.setText("{0} Kb/s".format(speed)) def ceshi2(self,i): self.progress.setValue(round(i,2)) def ceshi3(self,i): stol=round(float(i)/1024/1024,2) self.sizetotal.setText("{0} M".format(stol)) def ceshi4(self,i): stol=round(float(i)/1024/1024,2) self.sizenow.setText("{0} M / ".format(stol)) def _download(self,url, totalsize,fobj, buffer): start_time=time() req = urllib2.Request(url) f = urllib2.urlopen(req) # 初始化當前檔案位置偏移 offset = 0 while 1: block = f.read(buffer) # 當前執行緒資料獲取完畢後則退出 if not block: print u'完成退出迴圈' break #當前耗時 dural_time=float(time()) - float(start_time) # 設定檔案物件偏移地址 fobj.seek(offset) # 寫入獲取到的資料 fobj.write(block) offset = offset + len(block) #計算下載速度 speed = (float(offset)/float(dural_time)/(1000*1000))*1000 #計算下載進度 proess=float(offset)/float(totalsize)*100 #print proess self.emit(SIGNAL("Getsizenow(int)"),offset) #傳送當前檔案大小訊號 self.emit(SIGNAL("Getproess(float)"),proess) #傳送當前進度 self.emit(SIGNAL("Getspeed(float)"),speed) #傳送當前下載速度 def main(self,url, thread=1, save_file='', buffer=1024): # 獲取檔案的大小 req = urllib2.urlopen(url) size = int(req.info().getheaders('Content-Length')[0]) self.emit(SIGNAL("Getsizetotal(int)"),size) # 初始化檔案物件 self.fobj = open(save_file, 'wb') t = self._download(url, size ,self.fobj, buffer) # 關閉檔案物件 self.fobj.close() print u'下載完成!' if __name__=='__main__': import sys app=QApplication(sys.argv) tree=UpdateWidget() tree.show() sys.exit(app.exec_())
後面的可自行拓展功能,效果如下:
下載360的速度有點快。。。。
相關推薦
python實現檔案下載(包含進度條顯示,檔案大小顯示,下載速度顯示)
不多說了,直接上程式碼記錄: #!/usr/bin/lgy #-*-coding:utf-8-*- import urllib2,threading from PyQt4.QtGui import * from PyQt4.QtCore import * from pu
Python實現屏幕輸出進度條的方法
python一般輸出到屏幕的時候是一組數據一次性全部顯示出來得。這是因為電腦為了提高效率,數據會先暫時放入緩存,等緩存滿了或者操作結束了,再一次性將數據進行處理。類似進度條的情況需要字符一次一個的蹦出來,這時候就需要使用flush()來強制執行這個處理緩存內數據的操作。上課講文件flush()的時候,最後提到
Java語言 瀏覽器下載檔案時沒有進度條和預計檔案大小
文章地址:http://www.haoplay.top/tiezi/11_1_1.html解決方案: 在程式碼中新增: response.setHeader("Content-Length", ""+file.length());
Android中使用AsyncTask實現下載檔案動態更新進度條功能
1. 泛型AysncTask<Params, Progress, Result>Params:啟動任務時傳入的引數,通過呼叫asyncTask.execute(param)方法傳入。Progress:後臺任務執行的進度,若不用顯示進度條,則不需要指定。Result
異步下載圓形進度條顯示進度
https ati ack blog nbsp idt 進度 circle osi 圓形進度條參考鏈接即可:使用css3實現圓形進度條 需求點擊下載後遮罩層顯示下載進度: 1.圓形進度條參考以上鏈接,有點小瑕疵,可更改定位距離實現重合。 2.遮罩層: .lbOverla
PHP 遠程文件下載的進度條實現
其他 compact AS lose 信息 tint spinner ajax style download.php 1 <?php 2 // 當前文件:download.php 3 4 $action = @$_GET[‘action‘]; 5
Canvas實現多個圓形進度條顯示百分比,並繫結各自的click事件
Canvas實現多個圓形進度條顯示百分比,並繫結各自的click事件 目錄 Canvas實現多個圓形進度條顯示百分比並繫結各自的click事件 目錄 實現效果 製
JS 檔案讀取的進度條顯示方法(FileReader、onprogress)——20181116
這裡FileReader只是從磁碟把檔案讀取到瀏覽器,並沒有傳送到伺服器。參考連結1 參考連結2 <!DOCTYPE html> <html > <head> <meta charset="UTF-8"
java實現下載時進度條提示
1、實現原理 計算出已經處理的資料記錄數與所有需要匯出的資料記錄數的比例,根據每一個登陸使用者的不同將比例存入快取中,前臺設計一個定時器,每隔一段時間去快取中獲取比例,然後根據比例來展示一下下載的進度。 2、具體程式碼實現 //
【H5】手機瀏覽器分批次多張上傳圖片(檔案),包含進度條
描述 本文所描述的上傳檔案主要是應用於手機端,PC端可以酌情改造。 應用場景: 手機瀏覽器一次上傳多張圖片或者檔案,將檔案每5個拆分為一組上傳。上傳進度條為手機端上傳至後臺所用時間不包含後臺耗時。 選擇圖片用H5的input file標籤(能否選多張看瀏覽器了),上傳功能使
檔案上傳進度條顯示
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Insert title here</title> <style>
利用AJAX技術實現網頁無重新整理進度條顯示
在網頁中實現頁面無重新整理的進度條顯示不是一件很麻煩的事情,但如果這個進度條要能準確反映當前事務或者複雜邏輯的執行進度,那麼卻並不是一件容易的事情,目前AJAX技術流行,所以本文作者試想通過AJAX來實現網頁準確進度條,以銄讀者。首先應該想一個問題,複雜事務或者事務邏輯如果不
servlet+jquery實現檔案上傳進度條
現在檔案的上傳,特別是大檔案上傳,都需要進度條,讓客戶知道上傳進度。 本文簡單記錄下如何弄進度條,以及一些上傳資訊,比如檔案的大小,上傳速度,預計剩餘時間等一些相關資訊。程式碼是匆忙下簡單寫的,一些驗證沒做,或程式碼存在一些隱患,不嚴謹的地方。本文程
SSH實現帶進度條的Ajax檔案上傳
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package util.upload; import com.opensymphony.xwo
SpringMVC實現的檔案上傳進度條Bootstrap展示
背景 想做一個帶進度條的檔案上傳,可是搜尋的結果都不是很滿意,最後參考一個實踐了一下,基於SpringMVC實現,前端採用Bootstrap。 整理一下進度條的實現。 效果 先看最後的效果 實現步驟 前提 SpringMVC已經配置
javaweb實現檔案上傳進度條功能
一、建立幫助類package com.xxxx.xxxx.util;public class Progress {private long bytesRead; private long contentLength; private long items;
cgi 上傳檔案(c 語言) 進度條顯示
//虛擬機器上搭建apache伺服器上傳檔案 //1.程式碼: #include "stdio.h" #include "string.h" #include "stdlib.h" #include "dirent.h" #include <wchar.h> #i
Jquery實現可拖動進度條
div overflow 20px ext pan 點擊 技術分享 img ani html <div class="progress"> <div class="progress_bg">
Linux中實現一個簡單的進度條【轉】
做的 會有 發現 文件 rsquo 實時 時間 改進 常見 轉自:http://blog.csdn.net/yuehailin/article/details/53999288 說起進度條,其實大家常常見到,比如說你在下載視頻或文件的時候,提示你當前下載進度的就是我們今天
一個KVO 實現WKWebView加載進度條的例子 (註意最後移除觀察者)
svi anim red all ini 一個 lap eat its // // OpenWebViewController.m // Treasure // // Created by 藍藍色信子 on 16/7/29. // Copyright ? 2016