天天看點

python下載下傳檔案暫停恢複_python下載下傳檔案的三種方法

Python開發中時長遇到要下載下傳檔案的情況,最常用的方法就是通過Http利用urllib或者urllib2子產品。

當然你也可以利用ftplib從ftp站點下載下傳檔案。此外Python還提供了另外一種方法requests。

下面來看看三種方法是如何來下載下傳zip檔案的:

方法一:

import urllib

import urllib2

import requests

print "downloading with urllib"

url = 'http:/test/demo.zip'

print "downloading with urllib"

urllib.urlretrieve(url, "demo.zip")

方法二:

import urllib2

print "downloading with urllib2"

url = 'http:/test/demo.zip'

f = urllib2.urlopen(url)

data = f.read()

with open("demo2.zip", "wb") as code:

code.write(data)

方法三:

import requests

print "downloading with requests"

url = 'http:/test/demo.zip'

r = requests.get(url)

with open("demo3.zip", "wb") as code:

code.write(r.content)

看起來使用urllib最為簡單,一句語句即可。當然你可以把urllib2縮寫成:

f = urllib2.urlopen(url)

with open("demo2.zip", "wb") as code:

code.write(f.read())

==========================================python requests======

在HTTP相關進行中使用python是不必要的麻煩,這包括urllib2子產品以巨大的複雜性代價擷取綜合性的功能。相比于urllib2,Kenneth Reitz的Requests子產品更能簡約的支援完整的簡單用例。

簡單的例子:

想象下我們試圖使用get方法從http://example.test/擷取資源并且檢視傳回代碼,content-type頭資訊,還有response的主體内容。這件事無論使用urllib2 或者Requests都是很容易實作的。

urllib2:

import urllib2

url = 'http://example.test/'

response = urllib2.urlopen(url)

response.getcode()

-- 200

response.headers.getheader('content-type')

-- 'text/html; charset=utf-8'

response.read()

-- 'Hello, world!'

Requests:

import requests

url = 'http://example.test/'

response = requests.get(url)

response.status_code

--

response.headers['content-type']

-- 'text/html; charset=utf-8'

response.content

-- u'Hello, world!這兩種方法很相似,相對于urllib2調用方法讀取response中的屬性資訊,Requests則是使用屬性名來擷取對應的屬性值。

兩者還有兩個細微但是很重要的差别:

1. Requests 自動的把傳回資訊有Unicode解碼

2. Requests 自動儲存了傳回内容,是以你可以讀取多次,而不像urllib2.urlopen()那樣傳回的隻是一個類似檔案類型隻能讀取一次的對象。

第二點是在python互動式環境下操作代碼很令人讨厭的事情

一個複雜一點的例子:現在讓我們嘗試下複雜點得例子:使用GET方法擷取http://foo.test/secret的資源,這次需要基本的http驗證。使用上面的代碼作為模闆,好像我們隻要把urllib2.urlopen() 到requests.get()之間的代碼換成可以發送username,password的請求就行了

這是urllib2的方法:

import urllib2

url = 'http://example.test/secret'

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()

password_manager.add_password(None, url, 'dan', 'h0tdish')

auth_handler = urllib2.HTTPBasicAuthHandler(password_manager)

opener = urllib2.build_opener(auth_handler)

urllib2.install_opener(opener)

response = urllib2.urlopen(url)

response.getcode()

--

response.read()

-- 'Welcome to the secret page!'

一個簡單的方法中執行個體化了2個類,然後組建了第三個類,最後還要裝載到全局的urllib2子產品中,最後才調用了urlopen,那麼那兩個複雜的類是什麼的

迷惑了嗎, 這裡所有urllib2的文檔 http://docs.python.org/release/2.7/library/urllib2.html

那Requests是怎麼樣解決同樣的問題的呢?

Requests:

import requests

url = 'http://example.test/secret'

response = requests.get(url, auth=('dan', 'h0tdish'))

response.status_code

--

response.content

-- u'Welcome to the secret page!'

隻是在調用方法的時候增加了一個auth關鍵字函數

我敢打賭你不用查文檔也能記住。

錯誤處理 Error HandlingRequests 對錯誤的處理也是很非常方面。如果你使用了不正确的使用者名和密碼,urllib2會引發一個urllib2.URLError錯誤,然而Requests 會像你期望的那樣傳回一個正常的response對象。隻需檢視response.ok的布爾值便可以知道是否登陸成功。

response = requests.get(url, auth=('dan', 'wrongPass'))

response.ok

-- False

其他的一些特性:

* Requests對于HEAD, POST, PUT, PATCH, 和 DELETE方法的api同樣簡單

* 它可以處理多部分上傳,同樣支援自動轉碼

* 文檔更好

* 還有更多

Requests 是很好的,下次需要使用HTTP時候可以試試。

Python實作下載下傳檔案的三種方法

下面來看看三種方法是如何來下載下傳zip檔案的:方法一: import urllib print "downloading with urllib" url = 'http://www ...

Python 下載下傳圖檔的三種方法

import os os.makedirs('./image/', exist_ok=True) IMAGE_URL = "http://image.nationalgeographic.c ...

Python下載下傳網頁的幾種方法

get和post方式總結 get方式:以URL字串本身傳遞資料參數,在伺服器端可以從'QUERY_STRING'這個變量中直接讀取,效率較高,但缺乏安全性,也無法來處理複雜的資料(隻能是字元串,比如在 ...

VC中加載LIB庫檔案的三種方法

VC中加載LIB庫檔案的三種方法 在VC中加載LIB檔案的三種方法如下: 方法1:LIB檔案直接加入到工程檔案清單中   在VC中打開File View一頁,選中工程名,單擊滑鼠右鍵,然後選中&quo ...

java将doc檔案轉換為pdf檔案的三種方法

http://feifei.im/archives/93 —————————————————————————————————————————————— 項目要用到doc轉pdf的功能,一番google ...

python字元串連接配接的三種方法及其效率、适用場景詳解

python字元串連接配接的方法,一般有以下三種:方法1:直接通過加号(+)操作符連接配接website=& 39;python& 39;+& 39;tab& 39;+&amp ...

python讀檔案的三個方法read()、readline()、readlines()詳解

檔案 runoob.txt 的内容如下: 1:www.runoob.com2:www.runoob.com3:www.runoob.com4:www.runoob.com5:www.runoob.co ...

Logstash處理json格式日志檔案的三種方法

假設日志檔案中的每一行記錄格式為json的,如: {"Method":"JSAPI.JSTicket","Message":"JS ...

Viewing the interface of your Swift code,檢視Swift代碼的頭檔案的三種方法

Technical Q&A QA1914 Viewing the interface of your Swift code Q:  How do I view the interface ...

随機推薦

java compiler level does not match the version of the installed java project facet

Java compiler level does not match the version of the installed java project facet錯誤的解決 因工作的關系,Eclip ...

iOS thirdKeyboard Develop (APP Extension)

如果需要開發第三方鍵盤 首先得了解一下蘋果官方文檔  https://developer.apple.com/library/ios/documentation/General/Conceptual/ ...

putty+xming遠端登入Ubuntu16.04圖形界面

前面我寫過一篇的文章.文章當中已經可以遠端通路linux伺服器并且傳輸檔案,然而要在putty中使用開啟圖形界面的指令到目前為止還是不夠 ...

c++ 常數字尾說明

1.數值常數有:整型常數.浮點常數:    2.隻有數值常數才有字尾說明:    3.數值常數字尾不區分字母大小寫.    (1)整型常數的表示形式有:十進制形式.以0開頭的八進制形式.以0x開頭的十 ...

Otsu algorithm

一.介紹 OTSU算法也稱最大類間差法,有時也稱之為大津算法,被認為是圖像分割中門檻值選取的最佳算法,計算簡單,不受圖像亮度和對比度的影響,是以在數字圖像處理上得到了廣泛的應用.它是按圖像的灰階特性,将 ...

ecshop背景導航修改教程說明

ecshop背景導航修改教程說明 ECSHOP教程/ ecshop教程網(www.ecshop119.com) 2014-06-25   需要操作的檔案為: 1.修改admin\includes\in ...

python 之 初識子產品

什麼是子產品 什麼是子產品 一個.py檔案 就是一個子產品 我們使用import加載的子產品分為4個通用類别 1.py檔案 2.包好一組子產品的包(帶__init__.py檔案的檔案夾) 3.内置子產品 4.已被 ...

Container and Injection in Java

一.Container 1.為什麼使用Container 通常,瘦用戶端多層應用程式很難編寫,因為它們涉及處理事務和狀态管理.多線程.資源池和其他複雜的低級細節的複雜代碼行.基于元件和獨立于平台的Ja ...

Node_初步了解(1)

(1)在cmd或是git上面運作node.js檔案,ctrl+c可以停掉之前的服務. (2)node.js本質是一個JavaScript運作環境. (3)node.js與浏覽器控制台js執行環境的不同 ...

SSM項目layui分頁執行個體

最近學了layui,發現其中的分頁挺有意思的,是以整理了一下,一遍自己随時檢視.(官方文檔上已經很詳細了,當中有不足的地方歡迎大家指出) 關于前台的js檔案,css樣式,js樣式,大家可以到官網下 本 ...