Python中如何判断Streamlit上传的文件是CSV格式还是Excel格式?
解决方案
你原有代码存在两处核心问题:
- 逻辑分支完全错误:
else分支对应uploaded_file is None的场景,此时向pd.read_excel传入空值必然触发报错 - 没有做格式判断:只要文件上传成功,无论格式都会优先调用
pd.read_csv()读取,上传Excel文件时自然会解析失败
扩展名获取与判断方法
Streamlit的UploadedFile对象自带name属性,可直接读取文件名后提取扩展名:
- 用
os.path.splitext()方法直接提取后缀,兼容性更好,避免手动分割字符串的异常 - 常规支持的表格文件后缀可覆盖:
.csv/.xlsx/.xls三类
修正后完整代码
import streamlit as st import pandas as pd import os uploaded_file = st.file_uploader("Choose a file") if uploaded_file is not None: # 获取文件扩展名,转小写避免大小写导致的判断失败 file_ext = os.path.splitext(uploaded_file.name)[1].lower() # 根据扩展名选择读取方法 if file_ext == '.csv': data = pd.read_csv(uploaded_file) elif file_ext in ['.xlsx', '.xls']: data = pd.read_excel(uploaded_file) else: st.error("不支持的文件格式,请上传csv或Excel文件") st.stop() # 输出数据预览 st.write(data.head())
额外说明
- 代码中对扩展名做了小写转换,可避免用户上传
.CSV/.XLSX这类大写后缀的文件时判断失效 - 增加了不支持格式的错误提示,优化用户体验
内容的提问来源于stack exchange,提问作者Saba
相关产品推荐
相关产品推荐

