Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在服务器中临时存储文件并从flask python中的“下载按钮”检索回来_Python_Flask_Web_Save - Fatal编程技术网

如何在服务器中临时存储文件并从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,然后将其传递给服务器哦,你能举个例子吗?这样我就可以有一个参考资料了~谢谢