2016-05-19 76 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'