我正在使用POST请求将CSV文件发送到服务器。
我正在使用requests.post
如果CSV文件很大并且我的内存有限或者我使用类似文件的对象永远不会将整个文件加载到内存中,是否会出现问题?我不确定。
我知道有一个流选项,但听起来更像是获取响应而不是发送数据。
headers = {
'content-type': 'text/csv',
}
csvfile = '/path/file.csv'
with open(csvfile) as f:
r = requests.post(url, data=f, headers=headers)
答案 0 :(得分:7)
使用打开的文件对象作为data
参数可确保requests
为您传输数据。
如果可以确定文件大小(通过OS文件系统),则使用8kb缓冲区流式传输文件对象。如果无法确定文件大小,则会发送Transfer-Encoding: chunked
请求,而不是发送数据每行(该对象用作可迭代的)。
另一方面,如果要将files=
参数用于多部分POST,则在发送之前将文件加载到内存中。使用requests-toolbelt package流式传输多部分内容。
答案 1 :(得分:3)
这不会将整个文件加载到内存中,它将被拆分为块并一次传输一次。您可以在源代码here中看到这一点。