我正在使用Python的requests包从远程服务器下载数据。以前我只是像这样一口气下载整个响应:
response = requests.get(url=endpoint,
headers={'Authorization': 'Bearer ' + access_token,
'Content-type': 'application/json'}
)
然后使用response.json()方法访问数据:
reports = response.json()['data']['report']
但是,由于某些请求会传回大量数据,而这些数据最多需要几分钟才能下载,因此我被要求为每个请求实现一个进度条,以便用户可以监视正在发生的事情。发送GET请求时,这里的关键似乎是使用stream = True选项:
response = requests.get(url=endpoint,
headers={'Authorization': 'Bearer ' + access_token,
'Content-type': 'application/json'},
stream=True)
然后像这样大块下载数据:
with open('output_file', 'wb') as f:
for chunk in response.iter_content(chunk_size=4096):
f.write(chunk)
# print download progress based on chunk size and response.headers.get('content-length')
我被卡住的地方是,我使用response.iter_content()]找到的所有示例在下载时都将每个块直接写入文件中(如上例所示)。确实,我需要将JSON数据下载到本地变量中,以便可以对它进行一些操作/过滤,然后将其写入磁盘,但是不确定以块方式下载响应时如何实现此目的。有人可以建议怎么做吗?谢谢。
我正在使用Python的请求包从远程服务器下载数据。以前我只是像这样一次性下载整个响应:response = requests.get(url = endpoint,...
response.iter_content
给您块。您可以与他们一起做任何您想做的事。您不必将它们写入文件。例如,您可以将它们粘贴在列表中: