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

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,
    )

关键修正点

  1. 用os.path.join()替代手动拼接路径,自动适配Windows和Linux的斜杠规则,避免路径错误
  2. 修正文件判断逻辑:os.path.isfile(os.path.join(mypath, f))确保检查的是目标文件夹里的文件,正确筛选出所有GIF文件
  3. 改用with语句打开文件,无需手动调用close(),更安全规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:20:00