使用请求在python中下载大文件

请求是一个非常不错的库。我想用它来下载大文件(> 1GB)。问题是不可能将整个文件保留在内存中,我需要分块读取它。这是以下代码的问题

import requests

def DownloadFile(url)

local_filename = url.split('/')[-1]

r = requests.get(url)

f = open(local_filename, 'wb')

for chunk in r.iter_content(chunk_size=512 * 1024):

if chunk: # filter out keep-alive new chunks

f.write(chunk)

f.close()

return

由于某种原因,它无法按这种方式工作。仍将响应加载到内存中,然后再将其保存到文件中。

更新

如果你需要一个小型客户端(Python 2.x /3.x),可以从FTP下载大文件,则可以在此处找到它。它支持多线程和重新连接(它确实监视连接),还可以为下载任务调整套接字参数。

回答:

使用以下流代码,无论下载文件的大小如何,都限制了Python内存的使用:

def download_file(url):

local_filename = url.split('/')[-1]

# NOTE the stream=True parameter below

with requests.get(url, stream=True) as r:

r.raise_for_status()

with open(local_filename, 'wb') as f:

for chunk in r.iter_content(chunk_size=8192):

if chunk: # filter out keep-alive new chunks

f.write(chunk)

# f.flush()

return local_filename

请注意,使用返回的字节数iter_content不完全是chunk_size;; 它应该是一个通常更大的随机数,并且在每次迭代中都应该有所不同。

以上是 使用请求在python中下载大文件 的全部内容, 来源链接: utcz.com/qa/428618.html

回到顶部