Как загрузить, обработать с pandas и загрузить файл .csv с помощью Da sh? - PullRequest
2 голосов
/ 08 января 2020

Я пытаюсь написать простое веб-приложение с Da sh, где пользователь загружает CSV-файл, некоторая обработка выполняется в кадре данных с помощью pandas, а затем можно загрузить новый CSV-файл. пользователем по ссылке. Хотя я неплохо разбираюсь в анализе данных, я очень плохо знаком с Da sh. Это, вероятно, супер базовый c, но я не знаю, где должна обрабатываться pandas часть обработки go, и как в конце концов создать ссылку для скачивания.

Вот упрощенная версия кода:

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 голосов
/ 02 мая 2020

Сначала вам нужно импортировать следующие дополнительные библиотеки:

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)

Добавьте эти функции:

def save_file(name, content):
    """Decode and store a file uploaded with Plotly Dash."""
    data = content.encode("utf8").split(b";base64,")[1]
    with open(os.path.join(UPLOAD_DIRECTORY, name), "wb") as fp:
        fp.write(base64.decodebytes(data))

def uploaded_files():
    """List the files in the upload directory."""
    files = []
    for filename in os.listdir(UPLOAD_DIRECTORY):
        path = os.path.join(UPLOAD_DIRECTORY, filename)
        if os.path.isfile(path):
            files.append(filename)
    return files

def file_download_link(filename):
    """Create a Plotly Dash 'A' element that downloads a file from the app."""
    location = "/download/{}".format(urlquote(filename))
    return html.A(filename, href=location)

Полный код можно найти здесь: Пример: выгрузка и загрузка файлов с помощью Plotly Da sh

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...