Python 使用curl在Flask中打开作为二进制数据发送的csv文件
我正在进行一项挑战,我必须创建一个Flask应用程序,使用csv文件来训练机器学习模型。使用以下curl命令将此csv文件发送到my Flask应用程序:Python 使用curl在Flask中打开作为二进制数据发送的csv文件,python,csv,flask,curl,Python,Csv,Flask,Curl,我正在进行一项挑战,我必须创建一个Flask应用程序,使用csv文件来训练机器学习模型。使用以下curl命令将此csv文件发送到my Flask应用程序: curl \ --silent \ --fail \ --data-binary @train.csv \ --header "Content-Type: text/csv" 这个curl命令是预定义的,因此我无法更改它以满足我的需要。 另外,我没有带表单
curl \
--silent \
--fail \
--data-binary @train.csv \
--header "Content-Type: text/csv"
这个curl命令是预定义的,因此我无法更改它以满足我的需要。
另外,我没有带表单的前端组件,只有Flask应用程序
我正在尝试打开Flask中的train.csv文件,但未成功。我试过很多不同的方法,但都不管用。如何使用此命令在Flask中打开此文件?特别是作为二进制数据发送的csv文件,没有像sofile@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']
被我用来测试我的Flask应用程序,使用Postman来检查它是否工作,它确实工作了。如果我理解你的问题,出于测试目的,您希望通过curl
命令将发送/发布/上载一个.csv
文件发送到该端点/genres/train
,以使用熊猫
处理该文件,如果是这样,我建议您使用本教程
使用CURL上传文件时,许多人会犯错误,认为使用-X POST作为常规表单数据;事实上,这样做会导致错误
使用CURL上传文件的正确方法是使用-F(-form)选项,该选项将向请求中添加enctype=“multipart/form data”
在您的情况下,首先需要稍微更改代码
@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
如果我理解您的问题,出于测试目的,您希望通过curl
命令将发送/发布/上载一个.csv
文件发送到该端点/genres/train
,使用熊猫
处理该文件,如果是这样,我建议您使用本教程
使用CURL上传文件时,许多人会犯错误,认为使用-X POST作为常规表单数据;事实上,这样做会导致错误
使用CURL上传文件的正确方法是使用-F(-form)选项,该选项将向请求中添加enctype=“multipart/form data”
在您的情况下,首先需要稍微更改代码
@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
我自己设法找到了解决办法。以下是我用来读取作为二进制数据发送的csv文件的代码:
@app.route("/genres/train", methods=["POST"])
def train_model():
# Decode the request
data = request.data.decode("utf-8")
# Write data from the request in a local csv file
train_csv = "train_local.csv"
f = open(train_csv, "w", encoding="utf-8")
f.write(data)
f.close()
# Load the train csv file as a DataFrame
train_df = pd.read_csv(train_csv)
我自己设法找到了解决办法。以下是我用来读取作为二进制数据发送的csv文件的代码:
@app.route("/genres/train", methods=["POST"])
def train_model():
# Decode the request
data = request.data.decode("utf-8")
# Write data from the request in a local csv file
train_csv = "train_local.csv"
f = open(train_csv, "w", encoding="utf-8")
f.write(data)
f.close()
# Load the train csv file as a DataFrame
train_df = pd.read_csv(train_csv)
谢谢你的回答!我正在处理这个挑战,curl命令不是我的,它是预定义的,所以我不能更改它。我没有html格式的表单,我只有Flask应用程序,我先用Postman自己测试了一下,这就是为什么我使用了“request.files['file']”的原因。但实际上,数据是使用curl命令发送到我的Flask应用程序的,该命令将数据作为二进制数据发送,而不使用“file=filename”这样的变量名。这就是我遇到问题的地方,因为如果数据没有变量名,并且存储为二进制数据,我不知道如何访问数据。谢谢您的回答!我正在处理这个挑战,curl命令不是我的,它是预定义的,所以我不能更改它。我没有html格式的表单,我只有Flask应用程序,我先用Postman自己测试了一下,这就是为什么我使用了“request.files['file']”的原因。但实际上,数据是使用curl命令发送到我的Flask应用程序的,该命令将数据作为二进制数据发送,而不使用“file=filename”这样的变量名。这就是我遇到问题的地方,因为如果数据没有变量名,并且也存储为二进制数据,我不知道如何访问它。