如何在服务器中临时存储文件并从flask python中的“下载按钮”检索回来
我正试图将我的如何在服务器中临时存储文件并从flask python中的“下载按钮”检索回来,python,flask,web,save,Python,Flask,Web,Save,我正试图将我的保存到_csv到os.path.join并从HTML页面的下载按钮返回csv文件,目前我收到了这个错误类型错误:join()得到了一个意外的关键字参数“index”,有人擅长flask python吗,请纠正我~ app.py @app.route('/transform', methods=["POST"]) def transform_view(): if request.method == 'POST': f = request.file
保存到_csv
到os.path.join
并从HTML页面的下载按钮返回csv文件
,目前我收到了这个错误类型错误:join()得到了一个意外的关键字参数“index”
,有人擅长flask python吗,请纠正我~
app.py
@app.route('/transform', methods=["POST"])
def transform_view():
if request.method == 'POST':
f = request.files['data_file']
if not f:
return "No file"
stream = io.StringIO(f.stream.read().decode("UTF8"), newline=None)
csv_input = csv.reader(stream)
stream.seek(0)
result = stream.read()
df = pd.read_csv(StringIO(result), usecols=[1])
#extract month value
df2 = pd.read_csv(StringIO(result))
matrix2 = df2[df2.columns[0]].to_numpy()
list1 = matrix2.tolist()
# load the model from disk
model = load_model('model.h5')
dataset = df.values
dataset = dataset.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
look_back = 1
dataset_look = create_dataset(dataset, look_back)
dataset_look = np.reshape(dataset_look, (dataset_look.shape[0], 1, dataset_look.shape[1]))
predict = model.predict(dataset_look)
transform = scaler.inverse_transform(predict)
X_FUTURE = 12
transform = np.array([])
last = dataset[-1]
for i in range(X_FUTURE):
curr_prediction = model.predict(np.array([last]).reshape(1, look_back, 1))
last = np.concatenate([last[1:], curr_prediction.reshape(-1)])
transform = np.concatenate([transform, curr_prediction[0]])
transform = scaler.inverse_transform([transform])[0]
dicts = []
curr_date = pd.to_datetime(list1[-1])
for i in range(X_FUTURE):
curr_date = curr_date + relativedelta(months=+1)
dicts.append({'Predictions': transform[i], "Month": curr_date})
new_data = pd.DataFrame(dicts).set_index("Month")
##df_predict = pd.DataFrame(transform, columns=["predicted value"])
new_data.to_csv(os.path.join("downloads", index = True, encoding='utf8'))
labels = [d['Month'] for d in dicts]
values = [d['Predictions'] for d in dicts]
colors = [ "#F7464A", "#46BFBD", "#FDB45C", "#FEDCBA",
"#ABCDEF", "#DDDDDD", "#ABCABC", "#4169E1",
"#C71585", "#FF4500", "#FEDCBA", "#46BFBD"]
line_labels=labels
line_values=values
return render_template('graph.html', title='Time Series Sales forecasting', max=17000, labels=line_labels, values=line_values, filename = filename)
@app.route('/download/<filename>')
def download(filename):
return send_from_directory("downloads", filename, as_attachment = True)
@app.route('/transform',methods=[“POST”])
def transform_view():
如果request.method==“POST”:
f=请求.files['data_file']
如果不是f:
返回“无文件”
stream=io.StringIO(f.stream.read().decode(“UTF8”),换行符=None)
csv\u输入=csv.reader(流)
stream.seek(0)
结果=stream.read()
df=pd.read\u csv(StringIO(结果),usecols=[1])
#提取月值
df2=pd.read\U csv(字符串(结果))
matrix2=df2[df2.columns[0]]to_numpy()
list1=matrix2.tolist()
#从磁盘加载模型
模型=负荷\模型('model.h5'))
数据集=df.values
dataset=dataset.astype('float32')
scaler=MinMaxScaler(功能范围=(0,1))
dataset=scaler.fit_变换(dataset)
回头看=1
dataset\u look=创建\u数据集(dataset,look\u back)
dataset_look=np.Reformate(dataset_look,(dataset_look.shape[0],1,dataset_look.shape[1]))
predict=model.predict(数据集\u外观)
变换=定标器。逆变换(预测)
X_未来=12
transform=np.array([])
last=数据集[-1]
对于范围内的i(X_未来):
curr_prediction=model.predict(np.array([last])。重塑(1,look_back,1))
last=np.concatenate([last[1:],curr\u prediction.reformate(-1)])
transform=np.连接([transform,curr\u prediction[0]]))
变换=定标器。逆变换([transform])[0]
dicts=[]
curr\u date=pd.to\u datetime(列表1[-1])
对于范围内的i(X_未来):
当前日期=当前日期+相对延迟(月=+1)
追加({'Predictions':transform[i],“Month”:curr_date})
新数据=pd.数据帧(dicts).设置索引(“月”)
##df_predict=pd.DataFrame(转换,列=[“预测值”])
新的到csv的数据(os.path.join(“下载”,index=True,encoding='utf8'))
标签=[d['Month']表示dicts中的d]
数值=[d['predicts']表示dicts中的d]
颜色=[“F7464A”、“46BFBD”、“FDB45C”、“FEDCBA”,
“ABCDEF”、“DDDD”、“ABCABC”、“4169E1”,
“C71585”、“FF4500”、“FEDCBA”、“46BFBD”]
line_标签=标签
行_值=值
返回渲染模板('graph.html',title='Time Series Sales forecasting',max=17000,labels=line\u labels,values=line\u values,filename=filename)
@app.route(“/download/”)
def下载(文件名):
从_目录返回发送_(“下载”,文件名,如_attachment=True)
HTML标记>
问题是由此行引起的
new_data.to_csv(os.path.join("downloads", index = True, encoding='utf8'))
将os.path.join
而不是的参数index
和encoding
输入到csv
(查看括号),解决该问题后,您将得到
new_data.to_csv(os.path.join("downloads"), index = True, encoding='utf8')
但是,这将导致创建名为downloads
的csv
文件,或者如果downloads
目录已经存在,则会出现错误。将所需的文件名添加为os.path。如果要在下载
目录中创建文件,请加入第二个参数。感谢您的推荐,它确实再次出现另一个错误,您的意思是添加第二个参数是这样的吗?>>new\u data.to\u csv(os.path.join(“downloads,result.csv”),index=True,encoding='utf8')
,如果这样,它只存储在本地文件而不是服务器中,但当我存储在本地文件中时,我仍然可以从HTML页面中的下载按钮
检索回文件吗?您需要将第二个参数传递到os.path.join
而不是第一个参数,执行:new\u data.to\u csv(os.path.join(“downloads”,“result.csv”),index=True,encoding='utf-8')
很抱歉,我收到此错误>>name错误:未定义名称“filename”
。但是,它成功地将result.csv
存储到本地文件downloads
,但是如何将我的result.csv
传递到服务器,以便用户可以从HTML页面
中的下载按钮下载?尝试在视图中而不是模板中准备文件的url,然后将其传递给服务器哦,你能举个例子吗?这样我就可以有一个参考资料了~谢谢