gpt4 book ai didi

python - 在 Python 中使用 requests 库时流式传输到变量而不是文件

转载 作者:行者123 更新时间:2023-12-01 06:37:48 24 4
gpt4 key购买 nike

我正在使用 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() 的示例在下载时都会将每个 block 直接写入文件(如上面的示例所示)。实际上,我需要将 JSON 数据下载到本地变量,以便我可以写入磁盘之前对其进行一些操作/过滤,但我不确定在分块下载响应时如何实现这一点.

有人可以建议如何完成吗?谢谢。

最佳答案

response.iter_content 为您提供 block 。你可以对它们做任何你想做的事。您不必将它们写入文件。

例如,您可以将它们放在一个列表中,然后将它们放在一起并在最后解析结果:

import json

chunks = []
for chunk in response.iter_content(chunk_size=4096):
chunks.append(chunk)
do_progress_bar_stuff()

full_content = b''.join(chunks)
parsed_data = json.loads(full_content)
do_stuff_with(parsed_data)

(我避免使用 + 连接 block ,因为这会导致二次运行时间。)

关于python - 在 Python 中使用 requests 库时流式传输到变量而不是文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59590669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com