我有一个api端点,在这里我使用python上传数据。终点接受
putHeaders = {
'Authorization': user,
'Content-Type': 'application/octet-stream' }
我当前的代码就是这样做的
。将词典另存为csv文件
.将csv编码为utf8
dataFile = open(fileData['name'], 'r').read()).encode('utf-8')
。将文件上载到api端点
fileUpload = requests.put(url,
headers=putHeaders,
data=(dataFile))
我想说的是
加载数据而不保存
到目前为止我试过了
使用将我的字典转换为字节
data=json.dumps(有效负载).encode('utf-8')
并加载到api端点。这可以工作,但api端点中的输出不正确
问题:
有人知道如何在不保存文件的情况下上传csv类型的数据吗
编辑:将dict写入csv时,使用
io.StringIO()
作为类似文件的对象。然后调用get_value()
,并将其作为数据参数传递给requests.put()
有关更多详细信息,请参见此问题:How do I write data into CSV format as string (not file)?
旧答案:
如果你的口述是这样的:
然后您可以将其转换为csv格式,如下所示:
然后用
data=csv_data
执行requests.put()
调用更新的答案
我没有意识到你的输入是一本字典,你提到字典正在保存为文件。我假设代码中的字典查找引用了一个文件。如果您想从dict变成类似CSV文件的对象,需要做更多的工作
根据您问题的I/O,您的输入词典似乎具有以下结构:
file_data = {"name": {"Col1": 1, "Col2": 2}}
鉴于此,我建议使用csv和io尝试以下操作:
您可能希望使用请求头中传递的正确MIME类型进行测试。虽然端点可能不关心,但最好使用正确的数据类型。CSV应该是
text/csv
。Python还提供了MIME types module:原始答案
只需以字节模式打开文件,而不用担心编码或读入内存
此外,使用上下文管理器来处理文件而不是分配给变量,并将头传递给
Session
对象,这样就不必在请求调用中重复传递头数据关于PUT方法的文件:
https://requests.readthedocs.io/en/master/api/#requests.put
注意:我修改了您的代码,以便更紧密地遵循python风格指南
相关问题 更多 >
编程相关推荐