Экспорт выходных данных Ploty Da sh в CSV, нажав на ссылку для скачивания - PullRequest
0 голосов
/ 14 апреля 2020

Привет Кто-нибудь может помочь советом? У меня возникла проблема при попытке экспортировать данные, которые заполняются из таблицы данных, отфильтрованной из выпадающего списка, после нажатия на ссылку для загрузки в файл CSV.

Ошибка получена после нажатия на ссылку для скачивания csv_string = dff.to_csv (index = False, encoding = 'utf-8') AttributeError: у объекта 'str' нет атрибута 'to_csv'

И файл, который был загружен, является файлом, содержащим код html.

введите описание изображения здесь

Ниже приведены фрагменты кода

'' '

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output,State
import plotly.graph_objs as go
import dash_table
import dash_table_experiments as dt

from urllib.parse import quote

import flask

import pandas as pd

import numpy as np
import pyodbc 

app.layout = html.Div([

    html.H3("Sales Summary Report"),  
        dcc.Graph(
            figure={
                "data": [
                    {
                        "x": df["Sales_RANGE"],
                        "y": df['count'],
                        "name":'No of Cust',
                        "type": "bar",
                        "marker":{'color':'rgba(26, 118, 255, 0.5)',
                       #'line':{
                      #  'color':'rgb(8,48,107)',
                      #  'width':1.5,
                      #  }
                        }

                    }
                ],
                "layout": {
                    "xaxis": {"automargin": True},
                    "yaxis": {
                        "automargin": True,
                       # "title": {"text": column}
                    },
                    "height": 250,
                    "margin": {"t": 10, "l": 10, "r": 10},
                },
            },
        )
 ,
     html.Label(["Select Sales range to view", 
                dcc.Dropdown(
                    id="SalesRange",
                    style={'height': '30px', 'width': '55%'},
                    options=[{'label': i,
                              'value': i
                             } for i in Sales_Range_Options],
                             value='All'                    
                )
               ]),


    #TABLE
    html.H5("Details"),

    html.Div(id='detailsresults')  , 
    html.A('Download Data',
        id='download-link',
        download="rawdata.csv",
        href="",
        target="_blank"
    )

])


def generate_table(dataframe):
    '''Given dataframe, return template generated using Dash components
    '''
    return html.Div( [dash_table.DataTable(
                #id='match-results',

                data=dataframe.to_dict('records'),
                columns=[{"name": i, "id": i} for i in dataframe.columns], 
                editable=False
                ),
                   html.Hr()
        ])


@app.callback(
    Output('detailsresults', 'children'),
    [
        Input('SalesRange', 'value'),
    ]
)


def load_results(SalesRange):
    if SalesRange== 'All':
        return  generate_table(df)
    else:
        results = df[df['SALES_RANGE'] == SalesRange]
        return generate_table(results)


@app.callback(
    dash.dependencies.Output('download-link', 'href'),
    [dash.dependencies.Input('SalesRange', 'value')])
def update_download_link(SalesRange):
    dff = load_results(SalesRange)
    csv_string = dff.to_csv(index=False, encoding='utf-8')
    csv_string = "data:text/csv;charset=utf-8,%EF%BB%BF" + quote(csv_string)

    return csv_string


'''

1 Ответ

0 голосов
/ 14 апреля 2020

Я полагаю, что ваш ответ выглядит следующим образом:

@app.server.route('/dash/urlToDownload') 
def download_csv():
    return send_file('output/downloadFile.csv',
                     mimetype='text/csv',
                     attachment_filename='downloadFile.csv',
                     as_attachment=True)

Вы можете просмотреть эту ссылку для получения дополнительной информации:

Предоставление пользователям возможности загружать CSV по клику

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