如何使用Dash上传,处理熊猫以及下载.csv文件?

时间:2020-01-08 15:16:46

标签: python pandas csv web-applications plotly

我正在尝试使用Dash编写一个简单的Web应用程序,其中用户上传了一个csv文件,使用熊猫在数据框中进行了一些处理,然后用户可以通过以下方式下载新的csv文件:链接。虽然我擅长数据分析,但对Dash还是很陌生。这可能是超级基础,但是我不知道熊猫处理部分应该放在哪里,以及最后如何生成下载链接。

这是代码的简化版本:

import base64
import datetime
import io


import dash
from dash.dependencies import Input, Output, State
import dash_core_components as dcc
import dash_html_components as html

import pandas as pd

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div(children = [
    html.H2('Please upload your csv file:'),
    dcc.Upload(
        id= 'upload-data', 
        children = html.Div([
            html.A('Select File')]),
        style = {
            'width': '100%',
            'height': '60px',
            'lineHeight': '60px',
            'borderWidth': '1px',
            'borderStyle': 'dashed',
            'borderRadius': '4px',
            'textAlign': 'center',
            'margin': '5px'
        }, 
    ),
    html.Div(id='download-link') 
    ])


def parse_contents(contents, filename):
    content_type, content_string = contents.split(',')

    decoded = base64.b64decode(content_string)
    try: 
        if 'csv' in filename:
            # Assume the uploaded file is csv 
            df = pd.read_csv(io.StringIO(decoded.decode('utf-8')))
    except Exception as e:
        print(e)
        return html.Div([
            'There was an error. Please uplaod the file in csv format.'
            ])
    return df


@app.callback(Output('download-link', 'href'),
    [Input('upload-data', 'contents')])

# Data processing using pandas:

def example_func(df):
    df['col2'] = df['col1']+'some string'
        return df

df_new = df.apply(example_func, axis=1)
df_new.to_csv('processed_data.csv')

# Return a link to let the user download the csv file with the processed data
def download_csv (contents):
    #######

if __name__ == '__main__':
    app.run_server(debug=True)

任何输入将不胜感激!

1 个答案:

答案 0 :(得分:0)

首先,您需要导入这些额外的库:

CategoryItem

定义文件的位置:

import os
from urllib.parse import quote as urlquote

添加以下功能:

UPLOAD_DIRECTORY = "/project/app_uploaded_files"

if not os.path.exists(UPLOAD_DIRECTORY):
    os.makedirs(UPLOAD_DIRECTORY)

您可以在这里找到完整的代码: Example: Upload and Download Files with Plotly Dash

希望有帮助!