Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
在Streamlit应用中高效展示本地文件夹中的多个GIF图片_创想鸟

在Streamlit应用中高效展示本地文件夹中的多个GIF图片

本教程详细介绍了如何在streamlit应用中优雅地显示本地文件夹内的多个gif图像。核心方法是利用python的`base64`模块将gif文件编码为数据uri,并通过`st.markdown`结合html `在Streamlit应用中高效展示本地文件夹中的多个GIF图片` 标签进行渲染。文章强调了使用`glob`模块进行文件路径管理的重要性,并提供了跨平台兼容的完整代码示例,确保图像能够正确加载并显示。

挑战:在Streamlit中显示本地GIF文件

在Streamlit应用中显示本地静态资源,如图片或GIF,开发者常会遇到文件路径管理上的挑战。Streamlit的渲染机制有时不会直接处理本地文件路径,尤其当文件不在应用服务器的静态文件服务路径下时。一种常见且可靠的方法是将图像数据编码为Base64字符串,然后将其作为数据URI直接嵌入到HTML 在Streamlit应用中高效展示本地文件夹中的多个GIF图片 标签中。这种方式绕过了文件路径的复杂性,使图像数据成为HTML内容的一部分,从而能够被浏览器直接渲染。

然而,在实践中,即便采用了Base64编码,也可能因为文件查找逻辑的缺陷而导致图像无法显示。例如,当使用os.listdir()获取文件名时,如果脚本的当前工作目录与GIF文件所在的目录不一致,那么os.path.isfile()或open()操作将无法找到文件,从而导致显示失败。

解决方案:利用glob模块高效加载GIF

为了克服文件路径管理的挑战并确保跨平台兼容性,我们可以结合使用os.chdir()来改变当前工作目录,并利用glob模块来高效地查找特定类型的文件。glob模块提供了一种灵活的方式来匹配符合特定模式的文件路径名,例如*.gif可以匹配所有以.gif结尾的文件。

以下是实现这一功能的完整Streamlit应用代码示例:

import streamlit as stimport base64import os, globimport platform# 1. 确定工作目录和GIF文件夹路径# 获取当前脚本文件所在的绝对路径work_dir = os.path.dirname(os.path.abspath(__file__))sys = platform.system() # 获取操作系统类型,用于构建跨平台路径# 根据操作系统构建GIF文件夹的路径# 假设GIF文件位于脚本同级目录下的 'forecast/fr/' 文件夹中# 使用 os.path.join 确保路径分隔符的跨平台兼容性gif_folder_path = os.path.join(work_dir, "forecast", "fr")# 2. 改变当前工作目录到GIF文件夹# 这是解决文件查找失败的关键一步。# glob.glob() 在没有指定完整路径时,会在当前工作目录中查找文件。if not os.path.exists(gif_folder_path):    st.error(f"错误:GIF文件夹不存在或路径不正确:{gif_folder_path}")    st.stop() # 如果文件夹不存在,停止应用运行os.chdir(gif_folder_path) # 切换到GIF文件所在的目录# 3. 使用 glob 查找所有GIF文件# glob.glob("*.gif") 会在当前工作目录中查找所有 .gif 文件gif_files = glob.glob("*.gif")if not gif_files:    st.warning(f"在 '{gif_folder_path}' 文件夹中未找到任何GIF文件。")else:    st.markdown("### 本地GIF动画展示", unsafe_allow_html=True)    # 4. 遍历GIF文件,编码并显示    for file_name in gif_files:        try:            # 以二进制模式打开文件            with open(file_name, "rb") as file_:                contents = file_.read()                # 将文件内容进行base64编码                data_url = base64.b64encode(contents).decode("utf-8")            # 使用 st.markdown 嵌入 HTML @@##@@ 标签            # `unsafe_allow_html=True` 必须设置为 True 才能渲染自定义HTML            # 添加 style 属性以确保图片在Streamlit界面中良好显示            st.markdown(                f'@@##@@',                unsafe_allow_html=True,            )            st.write(f"已加载: {file_name}") # 可选:显示文件名        except Exception as e:            st.error(f"处理文件 {file_name} 时发生错误: {e}")

代码解析:

路径管理 (os 和 platform):os.path.dirname(os.path.abspath(__file__)) 用于获取当前脚本文件所在的目录,这对于构建相对于脚本位置的路径至关重要。platform.system() 获取操作系统类型(如”Windows”、”Linux”),结合 os.path.join 来构建正确的跨平台路径,避免因路径分隔符差异导致的问题。改变工作目录 (os.chdir):os.chdir(gif_folder_path) 是解决原问题中文件查找失败的关键。它将Python脚本的当前工作目录切换到存放GIF文件的目录。这样,glob.glob(“*.gif”) 就能直接在正确的目录下查找文件。在改变目录前,通过 os.path.exists 检查路径是否存在,增强了代码的健壮性。文件查找 (glob):glob.glob(“*.gif”) 会返回一个列表,其中包含当前工作目录中所有扩展名为 .gif 的文件名。相比于 os.listdir,glob更专注于模式匹配,且在 os.chdir 后使用更为简洁有效。GIF编码与显示 (base64 和 st.markdown):文件读取: 使用 with open(file_name, “rb”) as file_: 以二进制读取模式打开GIF文件。with 语句确保文件在使用后会被正确关闭。Base64编码: base64.b64encode(contents).decode(“utf-8”) 将二进制文件内容编码为Base64字符串。这是将二进制数据嵌入到文本(如HTML)中的标准方法。数据URI: 编码后的字符串被格式化为 /uploads/20251107/1762461298690d0672c581a.gif 形式的数据URI。浏览器可以直接解析这种URI来显示图像,而无需单独的文件请求。Streamlit渲染: st.markdown(f’在Streamlit应用中高效展示本地文件夹中的多个GIF图片‘, unsafe_allow_html=True) 用于将包含数据URI的HTML {file_name} 标签注入到Streamlit应用中。unsafe_allow_html=True 参数是必需的,因为它允许Streamlit渲染自定义HTML内容。这里还添加了 style 属性来确保GIF图片能够自适应容器宽度并保持良好布局。

关键点与注意事项

文件路径管理: 理解当前工作目录和文件路径的绝对/相对性质至关重要。os.chdir() 是一种改变上下文的有效方法,但另一种选择是始终使用文件的完整绝对路径进行操作,例如 open(os.path.join(gif_folder_path, file_name), “rb”)。对于本例,os.chdir() 配合 glob 显得更为简洁。unsafe_allow_html=True 的安全性: st.markdown 结合 unsafe_allow_html=True 允许在Streamlit应用中注入任意HTML内容。虽然这提供了极大的灵活性,但也带来了潜在的安全风险,特别是当您处理来自不可信源的内容时。在本教程中,我们处理的是本地可信文件,因此风险较低。性能考量:大量GIF文件: 如果文件夹中包含大量或尺寸巨大的GIF文件,一次性加载并显示所有文件可能会导致Streamlit应用启动缓慢或浏览器卡顿。在这种情况下,可以考虑以下优化策略:分页加载: 使用Streamlit的 st.slider 或 st.button 实现分页显示。懒加载: 仅在用户滚动到特定区域时才加载GIF。压缩GIF: 优化GIF文件大小以减少加载时间。内存占用: Base64编码会使文件大小增加约33%。如果文件非常大,这可能会显著增加内存占用。跨平台兼容性: 使用 os.path.join 和 platform.system() 是确保代码在不同操作系统上都能正确运行的最佳实践。错误处理: 在代码中添加 try-except 块来捕获文件读取或编码过程中可能发生的错误,可以提高应用的健壮性,例如文件不存在、权限不足或编码失败等。

总结

在Streamlit应用中展示本地文件夹中的多个GIF文件,需要巧妙地结合文件路径管理、Base64编码和Streamlit的HTML渲染能力。通过使用os.chdir设置正确的上下文,并利用glob模块高效地查找目标文件,我们可以轻松地将GIF内容编码为数据URI,并通过st.markdown(…, unsafe_allow_html=True)将其嵌入到Web界面中。这种方法不仅解决了文件路径的困扰,还提供了一种灵活且跨平台的解决方案,使得Streamlit应用能够丰富地展示各种本地媒体资源。在实际开发中,务必注意性能和安全性方面的考量,以构建高效且用户友好的应用。

{file_name}在Streamlit应用中高效展示本地文件夹中的多个GIF图片

以上就是在Streamlit应用中高效展示本地文件夹中的多个GIF图片的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1378390.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python3安装包有病毒吗_Python3官方安装包安全性说明
上一篇 2025年12月14日 19:44:40
rpy2 中 R 函数返回 NoneType 的原因与正确调用姿势
下一篇 2025年12月14日 19:44:53

相关推荐

  • windows怎么设置电源高性能模式_windows开启电源高性能模式步骤

    windows怎么设置电源高性能模式_windows开启电源高性能模式步骤windows怎么设置电源高性能模式_windows开启电源高性能模式步骤windows怎么设置电源高性能模式_windows开启电源高性能模式步骤windows怎么设置电源高性能模式_windows开启电源高性能模式步骤

    首先选择高性能电源模式以提升电脑性能,可通过控制面板、设置应用、命令提示符或创建自定义计划实现;具体步骤包括在控制面板中选择“高性能”计划、在设置中启用“最佳性能”模式、使用命令提示符输入powercfg指令切换,或基于高性能模板创建自定义方案。 如果您希望提升Windows电脑的运行速度和响应能力…

    2026年10月2日 • 用户投稿
    1400
  • PHP文件上传系统:如何通过外键将文件精确关联到特定用户

    本教程详细阐述如何在PHP文件上传系统中,通过引入数据库外键(user_id)将上传的QR码图片与特定用户关联。内容涵盖数据库表结构设计、前端表单改造、后端文件处理逻辑及用户专属内容展示,确保文件上传的精确归属和管理。 1. 理解核心问题与解决方案 在多用户或多角色(如员工为用户上传)的应用场景中,…

    2026年10月2日
    000
  • 如何自定义 Sublime Text 的快捷键映射?

    如何自定义 Sublime Text 的快捷键映射?如何自定义 Sublime Text 的快捷键映射?如何自定义 Sublime Text 的快捷键映射?如何自定义 Sublime Text 的快捷键映射?

    要自定义sublime text快捷键,首先打开preferences > key bindings – user,在右侧json文件中添加快捷键绑定代码。例如:{ “keys”: [“ctrl+shift+k”], “c…

    2026年10月2日 • 用户投稿
    000
  • JS如何实现语音转文字

    JS如何实现语音转文字JS如何实现语音转文字JS如何实现语音转文字JS如何实现语音转文字

    答案:JavaScript语音转文字首选浏览器Web Speech API,适用于Chrome环境下的简单场景;若需高准确率、多语言支持及高级功能,则应采用前端录音、后端调用云服务(如Google、Azure)的方案。 在JavaScript中实现语音转文字,最直接的方式是利用浏览器内置的Web S…

    2026年10月2日 • 用户投稿
    700
  • 苹果账号登录入口解析-找到苹果官网登录的正确方法

    苹果账号登录入口解析-找到苹果官网登录的正确方法苹果账号登录入口解析-找到苹果官网登录的正确方法苹果账号登录入口解析-找到苹果官网登录的正确方法苹果账号登录入口解析-找到苹果官网登录的正确方法

    苹果账号登录入口为https://appleid.apple.com,用户可通过iPhone、iPad、Mac等设备设置页面登录,支持蓝牙配对快速登录及密码找回功能;登录后实现iCloud数据同步、App Store购买记录共享、通用剪贴板及查找设备等功能;账户安全由双重认证、恢复联系人、登录历史监…

    2026年10月2日 • 用户投稿
    000
  • CodeRabbit 发布面向终端的 AI 代码审查 CLI 工具

    CodeRabbit 发布面向终端的 AI 代码审查 CLI 工具CodeRabbit 发布面向终端的 AI 代码审查 CLI 工具CodeRabbit 发布面向终端的 AI 代码审查 CLI 工具CodeRabbit 发布面向终端的 AI 代码审查 CLI 工具

    ai代码审查初创公司coderabbit近日发布了“coderabbit cli”——一款专为终端环境设计的智能代码审查工具,可与claude code、codex cli、cursor cli、gemini等主流ai编程助手实现无缝对接。 据CodeRabbit介绍,随着越来越多开发者依赖CLI端…

    2026年10月2日 • 用户投稿
    000
  • 火狐浏览器怎么查看网页源代码_火狐浏览器打开页面源代码与元素检查器方法

    火狐浏览器怎么查看网页源代码_火狐浏览器打开页面源代码与元素检查器方法火狐浏览器怎么查看网页源代码_火狐浏览器打开页面源代码与元素检查器方法火狐浏览器怎么查看网页源代码_火狐浏览器打开页面源代码与元素检查器方法火狐浏览器怎么查看网页源代码_火狐浏览器打开页面源代码与元素检查器方法

    1、通过右键“查看页面源代码”或按Ctrl+U可查看网页HTML;2、右键“检查”或按F12打开开发者工具,可定位并修改具体元素;3、使用F12快捷键启动工具后,点击选择图标可快速检视页面组件。 如果您在浏览网页时需要查看页面的底层结构或调试内容,可以通过火狐浏览器快速访问网页源代码或检查具体元素。…

    2026年10月2日 • 用户投稿
    100
  • win11怎么关闭自动更新_彻底关闭系统更新方法汇总

    win11怎么关闭自动更新_彻底关闭系统更新方法汇总win11怎么关闭自动更新_彻底关闭系统更新方法汇总win11怎么关闭自动更新_彻底关闭系统更新方法汇总win11怎么关闭自动更新_彻底关闭系统更新方法汇总

    可通过设置暂停、禁用服务、组策略、注册表或任务计划程序阻止Windows 11自动更新。一、设置中暂停更新最长35天;二、服务管理器禁用Windows Update服务并设失败无操作;三、组策略编辑器禁用自动更新并删除更新功能访问权限;四、注册表创建WindowsUpdate和AU项,新建NoAut…

    2026年10月2日 • 用户投稿
    100
  • Sublime怎么新建文件?新建文件的4种快捷操作方式

    Sublime怎么新建文件?新建文件的4种快捷操作方式Sublime怎么新建文件?新建文件的4种快捷操作方式Sublime怎么新建文件?新建文件的4种快捷操作方式Sublime怎么新建文件?新建文件的4种快捷操作方式

    在sublime text中新建文件有四种主要方法,适合不同使用场景。① 使用快捷键 ctrl + n(windows/linux)或 cmd + n(mac)可快速在当前窗口打开未命名新文件,适合临时编写内容;② 通过菜单栏点击 “file → new file” 实现相同功能,适合新手熟悉界面;…

    2026年10月2日 • 用户投稿
    100
  • 惠普ProBook风扇转速不稳?调整与优化技巧

    惠普ProBook风扇转速不稳?调整与优化技巧惠普ProBook风扇转速不稳?调整与优化技巧惠普ProBook风扇转速不稳?调整与优化技巧惠普ProBook风扇转速不稳?调整与优化技巧

    惠普ProBook风扇异常可通过五种方法优化:1. 使用HP CoolSense自动调节温控;2. 在BIOS中设置自订风扇控制选项,调整数值至3或4以增强散热;3. 优化电源管理,降低最大处理器状态至80%-90%;4. 通过任务管理器清理高CPU占用的后台进程;5. 物理清洁散热口灰尘,确保通风…

    2026年10月2日 • 用户投稿
    200
  • 链表是什么?JS中怎样实现链表结构

    链表是什么?JS中怎样实现链表结构链表是什么?JS中怎样实现链表结构链表是什么?JS中怎样实现链表结构链表是什么?JS中怎样实现链表结构

    链表是一种通过指针连接节点的灵活数据结构,节点包含数据和指向下一节点的引用,内存中无需连续存放。与数组相比,链表在插入和删除操作上更高效,尤其在头部或中间位置,时间复杂度为O(1)(查找位置除外),而数组需移动元素,耗时O(n)。但链表访问元素需从头遍历,随机访问性能差,为O(n),且每个节点额外占…

    2026年10月2日 • 用户投稿
    200
  • Sublime如何运行Python?配置Python环境的完整步骤

    Sublime如何运行Python?配置Python环境的完整步骤Sublime如何运行Python?配置Python环境的完整步骤Sublime如何运行Python?配置Python环境的完整步骤Sublime如何运行Python?配置Python环境的完整步骤

    要让 sublime text 运行 python,需先确认已安装 python,再配置编译系统。1. 确认本地已安装 python:windows 在 cmd 输入 python –version 或 python3 –version,macos/linux 在终端输入 p…

    2026年10月2日 • 用户投稿
    100
  • Claude能否进行代码调试 编程辅助功能详解

    Claude能否进行代码调试 编程辅助功能详解Claude能否进行代码调试 编程辅助功能详解Claude能否进行代码调试 编程辅助功能详解Claude能否进行代码调试 编程辅助功能详解

    克劳德(Claude)作为一个大型语言模型,具备强大的自然语言处理能力,这也延伸到了编程领域。本文将详细介绍克劳DE在编程辅助方面的功能,特别是如何利用它进行代码调试。我们将通过分步讲解,向您展示如何通过提问来解释代码、生成代码、定位错误并优化代码,从而让它成为您编程工作中的得力助手。 ☞☞☞AI …

    2026年10月2日 • 用户投稿
    100
  • win10拨号连接错误651怎么解决_宽带连接调制解调器报告错误修复

    win10拨号连接错误651怎么解决_宽带连接调制解调器报告错误修复win10拨号连接错误651怎么解决_宽带连接调制解调器报告错误修复win10拨号连接错误651怎么解决_宽带连接调制解调器报告错误修复win10拨号连接错误651怎么解决_宽带连接调制解调器报告错误修复

    错误651通常由网络设备、驱动或系统配置问题导致。首先重启光猫、路由器并检查网线连接;随后更新或重装网卡驱动;接着以管理员身份运行命令提示符,执行netsh winsock reset和netsh int ip reset重置网络协议栈;若问题依旧,可尝试备份并替换C:WindowsSystem32…

    2026年10月2日 • 用户投稿
    500
  • Sublime Text 中 Tab 键与空格缩进的冲突处理

    Sublime Text 中 Tab 键与空格缩进的冲突处理Sublime Text 中 Tab 键与空格缩进的冲突处理Sublime Text 中 Tab 键与空格缩进的冲突处理Sublime Text 中 Tab 键与空格缩进的冲突处理

    sublime text 中 tab 键和空格缩进冲突可通过统一缩进风格并配置编辑器解决。1. 启用 “draw_white_space”: “all” 或使用 trailing spaces 插件检测混用情况;2. 使用 convert indent…

    2026年10月2日 • 用户投稿
    100
  • js如何实现拖拽功能

    js如何实现拖拽功能js如何实现拖拽功能js如何实现拖拽功能js如何实现拖拽功能

    实现javascript拖拽功能的核心是监听mousedown、mousemove和mouseup事件,通过计算鼠标偏移量实时更新元素位置,推荐使用transform: translate()提升性能。1. 对于多个可拖拽元素,可采用事件委托,将事件绑定在父容器上,通过判断e.target实现统一管…

    2026年10月2日 • 用户投稿
    100
  • win10无法更改账户类型怎么办_标准用户提升为管理员权限的方法

    win10无法更改账户类型怎么办_标准用户提升为管理员权限的方法win10无法更改账户类型怎么办_标准用户提升为管理员权限的方法win10无法更改账户类型怎么办_标准用户提升为管理员权限的方法win10无法更改账户类型怎么办_标准用户提升为管理员权限的方法

    使用管理员命令提示符输入net localgroup administrators 用户名 /add可成功添加管理员权限;2. 启用内置Administrator账户后通过控制面板修改其他账户类型;3. 利用lusrmgr.msc工具在本地用户和组中将目标账户加入Administrators组,完成…

    2026年10月2日 • 用户投稿
    100
  • Sublime怎么注释多行?多行注释与取消注释的终极方案

    Sublime怎么注释多行?多行注释与取消注释的终极方案Sublime怎么注释多行?多行注释与取消注释的终极方案Sublime怎么注释多行?多行注释与取消注释的终极方案Sublime怎么注释多行?多行注释与取消注释的终极方案

    sublime text 多行注释可通过多种方法实现。1. 使用快捷键 ctrl + /(windows/linux)或 cmd + /(mac)可对选中的多行代码进行单行注释,再次按下取消注释;2. 通过块选择功能(alt+拖动或option+拖动),可在多行指定位置手动输入注释符;3. 安装插件…

    2026年10月2日 • 用户投稿
    000
  • Windows10系统笔记本电脑续航比Windows11系统好

    Windows10系统笔记本电脑续航比Windows11系统好Windows10系统笔记本电脑续航比Windows11系统好Windows10系统笔记本电脑续航比Windows11系统好Windows10系统笔记本电脑续航比Windows11系统好

    目前市面上的笔记本电脑通常预装了微软的windows操作系统,其中主流的是windows 11,但也有部分机器搭载的是windows 10。尽管硬件配置相同,但不同操作系统的笔记本电脑在续航表现上存在差异,其中预装windows 10系统的笔记本续航时间更长。国外的专业测试人员针对这一现象进行了详细…

    2026年10月2日 • 用户投稿
    200
  • 夸克浏览器如何启用离线浏览_夸克浏览器离线模式的设置技巧

    夸克浏览器如何启用离线浏览_夸克浏览器离线模式的设置技巧夸克浏览器如何启用离线浏览_夸克浏览器离线模式的设置技巧夸克浏览器如何启用离线浏览_夸克浏览器离线模式的设置技巧夸克浏览器如何启用离线浏览_夸克浏览器离线模式的设置技巧

    开启夸克浏览器离线模式可实现无网浏览,依次进入菜单→设置→常规→开启“离线浏览模式”;手动保存网页可通过点击“下载”或“保存页面”将内容存至本地;使用阅读模式可缓存简洁版文章至书架;启用夜间自动预加载功能可在Wi-Fi环境下定时缓存指定网站内容。 如果您希望在没有网络连接的情况下继续浏览之前查看过的…

    2026年10月2日 • 用户投稿
    300

发表回复

登录后才能评论
关注微信