在Python中使用请求库时流式传输到变量而不是文件

问题描述 投票:1回答:1

我正在使用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,...

python python-requests
1个回答
0
投票
response.iter_content给您块。您可以与他们一起做任何您想做的事。您不必将它们写入文件。

例如,您可以将它们粘贴在列表中:

© www.soinside.com 2019 - 2024. All rights reserved.