Streamlit应用展示同一文件夹多GIF问题:代码可编译但无显示
解决Streamlit本地GIF无法显示的问题
你的代码编译正常但不显示GIF,核心是两个路径相关的错误,修正后就能正常展示:
错误分析
- 文件存在性判断错误:
os.listdir(mypath)返回的是目标文件夹里的文件名,直接用os.path.isfile(f)会检查当前工作目录下是否存在该文件,而非mypath目录,导致files列表为空,自然没有内容显示 - 路径拼接不规范:手动判断系统拼接斜杠容易出错,且代码冗余
修正后的代码
import streamlit as st import base64 import os # 用os.path.join统一处理跨平台路径,无需手动判断系统 work_dir = os.path.dirname(os.path.abspath(__file__)) mypath = os.path.join(work_dir, "forecast", "fr") # 拼接完整路径后再判断是否为文件 files = [f for f in os.listdir(mypath) if os.path.isfile(os.path.join(mypath, f))] """### 本地GIF展示""" for file in files: # 用with语句自动关闭文件,避免资源泄漏 with open(os.path.join(mypath, file), "rb") as file_: contents = file_.read() data_url = base64.b64encode(contents).decode("utf-8") st.markdown( f'<img src="data:image/gif;base64,{data_url}" alt="GIF">', unsafe_allow_html=True, )
关键修正点
- 用
os.path.join()替代手动拼接路径,自动适配Windows和Linux的斜杠规则,避免路径错误 - 修正文件判断逻辑:
os.path.isfile(os.path.join(mypath, f))确保检查的是目标文件夹里的文件,正确筛选出所有GIF文件 - 改用
with语句打开文件,无需手动调用close(),更安全规范
内容的提问来源于stack exchange,提问作者Ludogiraud
相关产品推荐
相关产品推荐

