2016-05-19 117 views
1

我對Pandas和Flask很新穎,試圖利用它來輸出包含調查反饋的彙總版本的CSV,我可以定期向用戶發送電子郵件。Python燒瓶 ​​- 將文件上傳到Pandas

作爲一個獨立的函數,只要我給它一個指定的輸入文件(例如'users/sample.csv')和outfile,但作爲應用程序的一部分運行並使用上傳的html文件時,失敗 類型錯誤:csuppfb()至少需要2個參數(0給出)

基本上我想通過上傳文件的功能,並有大熊貓做它的事,但它不會走到這一步。下面是代碼:

import re,os 
import beatbox 
import pandas as pd 
import numpy as np 
import argparse 
from jinja2 import Environment, FileSystemLoader 
from weasyprint import HTML 
from os.path import isfile,join 
from flask import Flask, request, redirect, url_for,render_template,json as fjson,send_from_directory 
from werkzeug import secure_filename 
from mapping import Autotagging,Manualtagging 
from defs import * 

UPLOAD_FOLDER = './uploads' 
PIVOT_FOLDER = './pivot' 
ALLOWED_EXTENSIONS = set(['csv']) 

app = Flask(__name__) 
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 
app.config['PIVOT_FOLDER']= PIVOT_FOLDER 

@app.route('/feedback',methods=['GET', 'POST']) 
def feedback(): 
    if request.method == 'POST': 
     file = request.files['file'] 
     if file and allowed_file(file.filename): 
      filename = randomword(6)+'_'+secure_filename(file.filename) 
      file.save(os.path.join(app.config['PIVOT_FOLDER'], filename)) 
      return redirect(url_for('csuppfb',df=filename)) 

    return render_template('mappingtest.html') 

@app.route('/csuppfb', methods=['POST','GET']) 
def csuppfb(df,infile, index_list=["Case Owner","Case Number","Support Survey - Service rating"], value_list = ["Age (Hours)"]): 
    """ 
    Creating a pivot table from the raw dataframe and returning it as a dataframe 
    """ 
    table = pd.pivot_table(df, index=index_list, values = value_list, 
        aggfunc=[np.sum,np.mean], fill_value=0) 
    return table 

def get_summary_stats(df, product): 
    """ 
    Get a stats summary 
    """ 
    results.append(df[df["Support Survey - Service rating"]==product]["Closed"].mean()) 
    results.append(df[df["Support Survey - Service rating"]==product]["Age (Hours)"].mean()) 
    return results 

def dataform(df): 
    """ 
    Take the dataframe and output it in html to output a pdf report or display on a web page 
    """ 
    df = pd.read_csv(filename) 
    csuppreport = pivot_table(df,filename) 
    agent_df = [] 
    for agent in csuppreport.index.get_level_values(0).unique(): 
     agent_df.append([agent, csuppreport.xs(agent, level=0).to_html()]) 
    env = Environment(loader=FileSystemLoader('.')) 
    template = env.get_template("csupp.html") 


template_vars={"title": "CSUPP FB REPORT", 
      "Excellent": get_summary_stats(df,"Excellent"), 
      "Good": get_summary_stats(df,"Good"), 
      "csupp_pivot_table": csuppreport.to_html(), 
      "agent_detail": agent_df} 

html_out = template.render(template_vars) 
HTML(string=html_out).write_pdf(args.outfile.name,stylesheets=["style.css"]) 
return render_template('csupp.html') 

什麼是有我上傳的 高清csuppfb(DF,INFILE ...

任何意見可以作爲數據幀參數的文件的最好的辦法非常感激。我感覺這件事情已經昭然若揭了我失蹤。

回答

0

您需要使用ARGS從Request對象包含所有網址參數 http://flask.pocoo.org/docs/0.10/quickstart/#the-request-object

看到這個基本的例子:

@app.route('/csuppfb', methods=['POST','GET']) 
    def csuppfb(): 
     if request.args['df'] : 
      df = request.args['df'] 
      #Do your panda stuff here. Instead of returning the filename :D 
      return str(df) 
     else : 
      return 'nofile'