python - 在 Flask 中打开 csv 文件,使用 curl 作为二进制数据发送
问题描述
我正在应对一个挑战,我必须创建一个 Flask 应用程序来使用 csv 文件训练机器学习模型。使用以下 curl 命令将此 csv 文件发送到我的 Flask 应用程序:
curl \
--silent \
--fail \
--data-binary @train.csv \
--header "Content-Type: text/csv"
此 curl 命令是预定义的,因此我无法更改它以满足我的需要。另外我没有带有表单的前端组件,只有 Flask 应用程序。
我正在尝试在 Flask 中打开 train.csv 文件,但没有成功。我尝试了许多不同的方法,但没有任何效果。如何使用这个命令在 Flask 中打开这个文件?特别是作为二进制数据发送的 csv 文件,没有像这样的变量名file@train.csv
这是我尝试打开文件的一些代码片段:
# Imports
import os
from flask import Flask, jsonify, request, make_response, session
import numpy as np
import pandas as pd
app = Flask(__name__)
@app.route('/genres/train', methods=['POST'])
def train_model():
# Check if the POST request has the file part
#if 'file' not in request.files:
#return jsonify({'error': 'No file part'})
# Get uploaded file
#file = request.files['file']
file = request.get_data()
# If user does not select file, raise error
if file.filename == '':
return jsonify({'error': 'No selected file'})
# If a file has been selected and it has csv extension then it can proceed
if file and file.filename.split('.', 1)[1].lower() == 'csv':
#with open('test.war', 'rb') as f:
data = pd.read_csv(file, delimiter=',')
请注意,request.files['file']
我使用 Postman 来测试我的 Flask 应用程序以检查它是否有效,它确实有效。
解决方案
如果我理解你的问题,出于测试目的,你想通过命令到这个端点send/post/upload
来处理文件,如果是这样,我会推荐你这个教程用 CURL 上传文件.csv
curl
/genres/train
pandas
使用 CURL 上传文件时,很多人会误以为使用 -X POST 作为常规表单数据;事实上,这种方式会导致错误。
使用 CURL 上传文件的正确方法是使用 -F (--form) 选项,它将在请求中添加 enctype=”multipart/form-data”。
$ curl -F "NAME_FILEINPUT=@path/to/local/file" UPLOAD_ADDRESS
在您的情况下,您首先需要稍微更改代码
@app.route('/genres/train', methods=['POST'])
def train_model():
[..]
# i assume you already have a form with a file input with "file" as parameter name
file = request.files['file']
# file = request.get_data()
[..]
然后试试这个命令:
$ curl -F "file=@path/to/local/file.csv" http://localhost:5000/genres/train
推荐阅读
- maven - 如何将 Maven 项目模块中的所有依赖项复制到目录中?
- jquery - 控制器将微软图表作为图像返回给 AJAX 调用
- c# - QuickFixN 不发送交易时段的登录信息
- c# - 在 C#.Net 中将文件上传到 zoho 联系人
- batch-file - 只允许数组窗口批处理文件中的唯一条目
- sqlite - 如何使用 FTS3 优化加入(在文本上)
- kubernetes - kube-state-metrics - 无法列出 *v1.Pod: text/html 的序列化程序;charset=utf-8 不存在
- javascript - 如何仅为 IE 9 以上的浏览器插入脚本
- c# - 如何为多项目 Nuget 包创建符号?
- javascript - JSPDF:未捕获的类型错误:无法读取未定义的属性“长度”