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

如何在Streamlit中实现每3分钟自动刷新CSV数据?

实现Streamlit UI自动刷新以同步显示CSV最新数据

要让Streamlit UI自动同步每3分钟更新的CSV数据,你需要添加自动页面刷新机制,确保每次刷新时重新读取最新的文件内容。以下是修改后的实现方案:

核心修改点

  • 使用Streamlit内置的st.autorefresh()设置固定刷新间隔(匹配CSV的3分钟更新周期)
  • 保留原有数据展示逻辑,确保每次刷新都重新读取CSV
  • 添加异常处理,避免文件写入时的读取冲突

修改后的完整代码

import streamlit as st
import pandas as pd
import os
from datetime import datetime

def strike_details():
    col1, col2 = st.columns(2)
    with col1:
        st.header("NIFTY")
        try:
            data1 = pd.read_csv(
                os.path.join(directory_of_python_script, 'strike_data_csv', "NIFTY_strike.csv"),
                on_bad_lines='skip'
            )
            st.table(data1)
        except Exception as e:
            st.warning(f"读取NIFTY数据失败:{str(e)}")

    with col2:
        st.header("BANKNIFTY")
        try:
            data2 = pd.read_csv(
                os.path.join(directory_of_python_script, 'strike_data_csv', "BANKNIFTY_strike.csv"),
                on_bad_lines='skip'
            )
            st.table(data2)
        except Exception as e:
            st.warning(f"读取BANKNIFTY数据失败:{str(e)}")

# 设置自动刷新:每3分钟(180秒)刷新一次,添加停止按钮
st.autorefresh(interval=180 * 1000, key="data_refresh")

# 显示最后刷新时间,提升用户体验
st.caption(f"最后刷新时间:{datetime.now().strftime('%H:%M:%S')}")

# 调用数据展示函数
strike_details()

关键说明

  1. 自动刷新配置:st.autorefresh(interval=180*1000)中的interval单位是毫秒,设置为180000即3分钟,完全匹配你的CSV更新周期。key参数用于标识刷新器,避免冲突。
  2. 异常处理:因为CSV文件用w+模式更新时,可能存在短暂的文件锁定状态,添加try-except可以避免页面因读取失败崩溃,同时给用户明确提示。
  3. 刷新时间提示:通过st.caption显示最后刷新时间,让用户直观了解数据是否为最新状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:55:16