基于Dash Plotly与Pandas实现Excel文件下拉选择功能
实现Dash下拉菜单自动加载文件夹内XLSX文件并切换DataFrame
以下是完整的实现代码,支持自动识别新增XLSX文件、通过下拉菜单选择文件并实时展示对应数据:
import dash from dash import dcc, html, Input, Output, dash_table import pandas as pd import os import glob # 初始化Dash应用 app = dash.Dash(__name__) # 定义页面布局 app.layout = html.Div([ # 文件选择下拉菜单 dcc.Dropdown( id='xlsx-file-selector', options=[], placeholder="选择一个XLSX文件", style={'width': '50%', 'margin': '20px 0'} ), # 数据展示表格 dash_table.DataTable( id='data-table', page_size=10, style_table={'overflowX': 'auto'}, style_cell={'textAlign': 'left'} ), # 定时刷新文件列表(可选,30秒刷新一次) dcc.Interval( id='interval-component', interval=30*1000, n_intervals=0 ) ]) # 回调:定时更新下拉菜单的文件列表 @app.callback( Output('xlsx-file-selector', 'options'), Input('interval-component', 'n_intervals') ) def refresh_file_list(_): # 扫描当前目录下的所有XLSX文件 current_path = os.getcwd() xlsx_files = glob.glob(os.path.join(current_path, "*.xlsx")) # 生成下拉选项:显示文件名,存储文件完整路径 return [{'label': os.path.basename(file), 'value': file} for file in xlsx_files] # 回调:根据选中的文件加载并展示数据 @app.callback( [Output('data-table', 'data'), Output('data-table', 'columns')], Input('xlsx-file-selector', 'value') ) def load_selected_xlsx(file_path): if not file_path: return [], [] # 读取选中的Excel文件 df = pd.read_excel(file_path) # 转换为Dash表格兼容格式 return df.to_dict('records'), [{'name': col, 'id': col} for col in df.columns] if __name__ == '__main__': app.run_server(debug=True)
关键功能说明
- 自动识别新增文件:通过
dcc.Interval组件定时触发文件扫描回调,无需修改代码或重启服务,新增的XLSX文件会自动出现在下拉菜单中。 - 按需加载数据:不再提前把所有文件读入内存,仅在用户选中文件时才读取对应数据,节省内存资源。
- 友好的交互体验:下拉菜单显示文件名而非完整路径,用户更易识别;无文件选中时展示空表格,避免报错。
原代码的优化点
原代码提前批量读取所有文件到列表的方式,既占用内存又无法实时更新文件列表。改为按需读取+定时扫描的模式后,既解决了动态文件识别问题,又提升了运行效率。
内容的提问来源于stack exchange,提问作者requiem
相关产品推荐
相关产品推荐

