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

如何使用Python Streamlit实现用户目录及文件选择功能?

解决方案

在Streamlit中实现本地文件/目录选择并获取路径、文件名用于计算,可通过以下方式实现,需注意浏览器安全限制的影响:

单个文件选择

使用file_uploader组件,在本地运行环境下可直接获取文件的真实本地路径:

import streamlit as st
import os

st.subheader("选择单个文件")
single_file = st.file_uploader("选择目标文件", type=None)
if single_file:
    st.info(f"文件名: *{single_file.name}*")
    # 仅本地运行时能获取真实本地路径
    if hasattr(single_file, 'file_path'):
        st.info(f"本地路径: `{single_file.file_path}`")
        # 示例:计算文件大小
        file_size = os.path.getsize(single_file.file_path)
        st.write(f"文件大小: {file_size} 字节")
    else:
        st.warning("非本地运行环境无法获取真实本地路径,仅能获取文件名")

目录选择

Streamlit 1.11及以上版本支持directory_uploader组件,可批量获取目录内文件的信息,本地运行时同样能拿到真实路径:

st.subheader("选择目录")
dir_files = st.directory_uploader("选择目标目录")
if dir_files:
    st.write("目录内文件信息:")
    for file in dir_files:
        st.markdown(f"- 文件名: *{file.name}*")
        if hasattr(file, 'file_path'):
            st.markdown(f"  本地路径: `{file.file_path}`")
            # 示例:计算文件行数
            try:
                with open(file.file_path, 'r', encoding='utf-8') as f:
                    line_count = len(f.readlines())
                st.write(f"  文件行数: {line_count}")
            except:
                st.write("  无法读取文件内容(非文本格式或权限问题)")
        st.divider()

关键说明

  • 浏览器安全策略限制:仅当Streamlit在用户本地机器上运行时,才能获取到文件的真实本地绝对路径;若部署到远程服务器,只能获取文件名和浏览器生成的虚拟路径,无法直接访问用户本地文件系统。
  • 无需上传文件内容:在本地运行场景下,通过file_path可直接读取本地文件进行计算,无需上传文件到Streamlit服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:52:09