如何在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()
关键说明
- 自动刷新配置:
st.autorefresh(interval=180*1000)中的interval单位是毫秒,设置为180000即3分钟,完全匹配你的CSV更新周期。key参数用于标识刷新器,避免冲突。 - 异常处理:因为CSV文件用
w+模式更新时,可能存在短暂的文件锁定状态,添加try-except可以避免页面因读取失败崩溃,同时给用户明确提示。 - 刷新时间提示:通过
st.caption显示最后刷新时间,让用户直观了解数据是否为最新状态。
内容的提问来源于stack exchange,提问作者varsha patil
相关产品推荐
相关产品推荐

