在Python中進行文件下載的操作是一項非常常見的任務,特別是在網絡爬蟲和數據處理方面。Python提供了多種方法來實現文件下載,比如直接使用urllib庫中的urlopen方法獲取文件,但是在下載大文件時該方法的效率可能就不如人意。因此,使用文件流進行下載成為了一種更高效的方式。
使用文件流進行下載就是將文件一塊一塊地按順序從網絡上讀取,每讀取一塊就立即寫入本地文件。這樣的方法既可以保證安全可靠地下載大文件,又可以避免因內存不足而導致的程序崩潰。
在Python中,使用文件流進行下載非常簡單,我們只需要使用requests庫中的get方法,設置stream參數為True即可。下面是一個使用文件流下載文件的示例代碼。
import requests url = "https://example.com/bigfile.tar.gz" filename = "bigfile.tar.gz" # 獲取文件的流對象 response = requests.get(url, stream=True) # 獲取文件的總大小 total_size = int(response.headers.get('Content-Length', 0)) # 預先打開文件以便寫入 with open(filename, 'wb') as f: for chunk in response.iter_content(chunk_size=1024): if chunk: # 過濾掉空的chunk f.write(chunk)
在以上代碼中,我們使用requests庫中的get方法獲取了指定URL的文件流對象response
,然后根據響應頭中的Content-Length獲取文件總大小total_size
,并打開本地文件以便寫入。接下來我們使用response
的iter_content()
方法按塊讀取并寫入本地文件,每次讀取的塊大小為1024字節。
如果需要進度條可以輸出下載進度,也可以使用tqdm庫進行美化。
import requests from tqdm import tqdm url = "https://example.com/bigfile.tar.gz" filename = "bigfile.tar.gz" # 獲取文件的流對象 response = requests.get(url, stream=True) # 獲取文件的總大小 total_size = int(response.headers.get('Content-Length', 0)) # 預先打開文件以便寫入 with open(filename, 'wb') as f: for chunk in tqdm(response.iter_content(chunk_size=1024), total=total_size//1024, unit='KB', unit_scale=True): if chunk: # 過濾掉空的chunk f.write(chunk)
如上代碼,使用tqdm庫配合文件總大小每次輸出下載進度,更加人性化。
上一篇get 請求返回json
下一篇MySQL刪除張三的性別