Flask + cURL将多行CSV输入连接成一个字符串

时间:2018-12-18 20:28:01

标签: curl flask

我的flask应用中有一条路线是这样开始的:

@app.route('/invocations', methods=['POST'])
def predict():
    """
    Do an inference on a single batch of data.
    """
    if flask.request.content_type == 'text/csv':
        X_train = flask.request.data.decode('utf-8')
        X_train = pd.read_csv(StringIO(X_train), header=None).values

要测试此路径,我正在从POST格式的文件中向服务器发送一个csv请求,该文件中包含多行:curl -X "POST" -H "Content-Type: text/csv" -d @health-check-data.csv http://localhost:5000/invocations

但是,令我惊讶的是,当我执行X_train = flask.request.data.decode('utf-8')时,我得到的csv的内容被串联成一个字符串,并删除了换行符。

为什么flask(或curl?)这样做?如何解决此问题?

1 个答案:

答案 0 :(得分:2)

这只是flask.request.data.decode('utf-8')的预期行为-它返回一个字符串。

您可以将该字符串转换为read_csv可以读取的缓冲区:

upload = flask.request.data.decode('utf-8')
buffer = StringIO()
buffer.write(upload)
buffer.seek(0)
X_train = pd.read_csv(buffer), header=None).values

但是,您可以通过Flask的request.files.get读取csv文件并返回缓冲区来绕过该过程:

X_train = pd.read_csv(request.files.get('name'),  header=None).values