Python:POST多个多部分编码的文件

时间:2014-04-07 17:15:57

标签: python python-requests

如此处所述,可以通过一个请求发送多个文件: Uploading multiple files in a single request using python requests module

但是,我在列表中生成这些多个文件处理程序时遇到问题。 所以,假设我想提出这样的请求:

sendfiles = {'file1': open('file1.txt', 'rb'), 'file2': open('file2.txt', 'rb')}
r = requests.post('http://httpbin.org/post', files=sendfiles)

如何从 myfiles 列表中生成 sendfiles

myfiles = ["file1.txt", "file20.txt", "file50.txt", "file100.txt", ...]

1 个答案:

答案 0 :(得分:3)

使用词典理解,使用os.path.splitext()从文件名中删除这些扩展名:

import os.path

sendfiles = {os.path.splitext(fname)[0]: open(fname, 'rb') for fname in myfiles}

请注意,两项元组的列表也会这样做:

sendfiles = [(os.path.splitext(fname)[0], open(fname, 'rb')) for fname in myfiles]

当心;使用files参数发送多部分编码的POST 首先将所有这些文件读入内存。使用requests-toolbelt project来构建流式POST主体:

from requests_toolbelt import MultipartEncoder
import requests
import os.path

m = MultipartEncoder(fields={
    os.path.splitext(fname)[0]: open(fname, 'rb') for fname in myfiles})
r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})