You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dash实现CSV表格定时更新失败问题求助

问题分析与解决方案

你的代码存在几个关键问题导致表格无法更新,以下是具体修正点和完整代码:

错误点说明

  • 回调参数不匹配:回调函数的参数需与输入组件对应,你定义的update_table(df)里的df并非回调输入(输入是n_intervals),这会导致参数错误。
  • DataTable属性错误:dash_table.DataTable的表格数据需通过data属性更新,而非children属性。
  • 路径转义问题:Windows路径中的\会被解析为转义字符,需用原始字符串r'路径'避免。
  • 返回格式错误:回调需返回字典列表(df.to_dict('records')),而非JSON字符串,这是DataTable要求的数据格式。
  • 初始数据逻辑:初始表格数据应通过回调生成,而非在layout中硬编码,保证更新逻辑一致性。

修正后的完整代码

from dash import Dash, html, dcc, dash_table, Input, Output, callback
import pandas as pd
from datetime import date
from threading import Timer
import os
import webbrowser

today = str(date.today())

app = Dash(__name__)

app.layout = html.Div(children=[
    html.H4(children=f'PRODUCTION STATS    {today}', style={'textAlign': 'left'}),
    dcc.Interval(id='interval-component', interval=30000, n_intervals=0),
    # 初始DataTable不设置data,由回调初始化
    dash_table.DataTable(id='my-table')
])

@callback(
    Output('my-table', 'data'),
    Input('interval-component', 'n_intervals')
)
def update_table(n_intervals):
    # 使用原始字符串避免路径转义
    df = pd.read_csv(r'I:\LABELLING\COUNT2.csv')
    # 返回DataTable要求的字典列表格式
    return df.to_dict('records')

def open_browser():
    if not os.environ.get("WERKZEUG_RUN_MAIN"):
        webbrowser.open_new('http://localhost:8005/')

if __name__ == '__main__':
    Timer(1, open_browser).start()
    app.run_server(host='localhost', port=8005, debug=True)

额外说明

  • 添加debug=True可以在开发时自动重载代码,方便调试。
  • 每次Interval触发时,回调会重新读取CSV文件并返回最新的字典列表,DataTable会自动更新显示。

内容的提问来源于stack exchange,提问作者CominUpMilhouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:28:30