如何在Streamlit中将用户输入保存为可每日更新的可下载CSV文件?
问题解答
1. 能不能把用户输入保存成可下载的CSV,还能在新增条目时自动更新?
当然可以。每次用户提交表单后,新条目会被追加到CSV文件里(文件不存在的话会自动创建),同时页面会提供下载按钮,随时能拿到包含所有历史数据的最新CSV。
2. 需要预先上传空白CSV文件吗?
不需要。代码会自动检查文件是否存在,不存在时会直接创建带表头的新文件,不用提前准备空白文件。
修改后的完整代码
import streamlit as st import pandas as pd import os # 定义CSV文件存储路径 CSV_FILE = "feedback_data.csv" with st.form('Feedback_Form'): st.header('Feedback Form') col1, col2 = st.columns(2) with col1: name = st.text_input('Enter product name') how_many = st.slider('Please Select Quantity', 0, 10, 5) with col2: date = st.date_input('Enter Date') time = st.radio('Select time to nearest label time', ('7.30', '7.45', '8.00', '8.10', '8.15')) submit_button = st.form_submit_button('Submit') if submit_button: # 把提交的数据整理成DataFrame格式 new_data = { "Product Name": [name], "Quantity": [how_many], "Date": [date], "Time": [time] } new_df = pd.DataFrame(new_data) # 处理CSV文件:存在则追加数据,不存在则创建新文件 if os.path.exists(CSV_FILE): existing_df = pd.read_csv(CSV_FILE) updated_df = pd.concat([existing_df, new_df], ignore_index=True) else: updated_df = new_df # 保存更新后的数据到CSV updated_df.to_csv(CSV_FILE, index=False) # 显示提交结果 st.success("提交成功!") st.write('**Enter product name:**', name, '**Enter Date:**', date, '**How Many:**', how_many, '**Time:**', time) # 显示下载按钮,只要CSV存在就能下载最新数据 if os.path.exists(CSV_FILE): with open(CSV_FILE, "rb") as f: st.download_button( label="下载所有反馈数据", data=f, file_name="feedback_data.csv", mime="text/csv" )
关键代码说明
- 用
pandas处理CSV的读写操作,os.path.exists()判断文件是否存在 - 提交表单时,新数据会被追加到已有数据后面,保证CSV自动更新
- 页面底部的下载按钮始终指向最新的CSV文件,用户随时可以获取完整数据
内容的提问来源于stack exchange,提问作者liambh
相关产品推荐
相关产品推荐

