python之文件下載 (urllib模塊urlretrieve方法)


有很多時候需要從服務端下載文件,比如更新客戶端的版本, 從服務端下載文件進行解析等很多的時候選下載文件操作,今天記錄一下python 從服務端下載文件的操作,

代碼如下:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from urllib import urlretrieve

class software(object):

    def __init__(self):
        super(software, self).__init__()


    def start(self):

        url = 'http://192.168.3.124:8074/ComputerSecConsole/upload/update/2.2/update.tar'
        local = './update.tar'
        try:
            urlretrieve(url, local, self.callbackfunc)  #
        except Exception as e:
            print "Exception"


    def callbackfunc(self,blocknum, blocksize, totalsize):
        '''回調函數
        @blocknum: 已經下載的數據塊
        @blocksize: 數據塊的大小
        @totalsize: 遠程文件的大小
        '''

        print  "blocknum  ",blocknum,"blocksize ",blocksize,"totalsize ",totalsize
        percent = 100.0 * blocknum * blocksize / totalsize
        if percent > 100:
            percent = 100
        print "%.2f%%" % percent,"    ",blocknum *blocksize,"    ",totalsize


if __name__ == '__main__':
    print("main")
    s = software()
    s.start()

運行結果:

[root@localhost text]# python text.py
main
blocknum   0 blocksize  8192 totalsize  788170240
0.00%      0      788170240
blocknum   1 blocksize  8192 totalsize  788170240
.................
100.00%      788168704      788170240
blocknum   96213 blocksize  8192 totalsize  788170240
100.00%      788176896      788170240

主要函數 :  urlretrieve

參數說明:
url:外部或者本地url
filename:指定了保存到本地的路徑(如果未指定該參數,urllib會生成一個臨時文件來保存數據);
reporthook:是一個回調函數,當連接上服務器、以及相應的數據塊傳輸完畢的時候會觸發該回調。我們可以利用這個回調函數來顯示當前的下載進度。
data:指post到服務器的數據。該方法返回一個包含兩個元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務器的響應頭

 

但是此程序還不過完善,在下載大的文件中,突然斷網,會出現死循環,下一部解決這個問題,  加油!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM