我的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
?)这样做?如何解决此问题?
答案 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