我正在使用 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)
使用打开的文件对象作为data
参数确保requests
将为您传输数据。
如果可以确定文件大小(通过操作系统文件系统),则使用 8kb 缓冲区对文件对象进行流式传输。如果无法确定文件大小,则会出现Transfer-Encoding: chunked
请求已发送 发送数据per line相反(该对象被用作可迭代对象)。
如果您要使用files=
另一方面,多部分 POST 的参数,文件将在发送之前加载到内存中。使用请求工具带包流式传输多部分上传:
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
csvfile = '/path/file.csv'
with open(csvfile) as f:
m = MultipartEncoder(fields={'csv_field_name': ('file.csv', f, 'text/csv')})
headers = {'Content-Type': m.content_type}
r = requests.post(url, data=m, headers=headers)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)