Streamlit应用未在正确目录搜索文件,如何无需绝对路径解决?
解决Streamlit应用文件路径查找问题
你的Streamlit应用脚本路径为/Users/myname/Documents/Master2/Python/Final_Project/streamlit_app.py,要读取的DataFrame文件路径是/Users/myname/Documents/Master2/Python/Final_Project/data/metabolic_syndrome.csv,使用相对路径df = pd.read_csv('data/metabolic_syndrome.csv')时出现错误:
FileNotFoundError: [Errno 2] No such file or directory: '/Users/myname/data/metabolic_syndrome.csv'
问题根源是Streamlit的工作目录并非脚本所在目录,而是你启动应用时终端的当前目录。以下是两种无需硬编码绝对路径的解决方法:
方法1:启动应用前切换到脚本所在目录
在终端中先进入脚本所在文件夹,再启动Streamlit:
cd /Users/myname/Documents/Master2/Python/Final_Project streamlit run streamlit_app.py
此时相对路径data/metabolic_syndrome.csv会基于脚本所在目录解析,能正确找到目标文件。
方法2:在脚本中动态获取目录路径
利用Python内置模块获取脚本的绝对目录,再拼接数据文件路径,无论从哪个目录启动应用都能生效:
使用os模块实现
import os import pandas as pd # 获取当前脚本的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接数据文件的完整路径 data_file_path = os.path.join(script_dir, 'data', 'metabolic_syndrome.csv') df = pd.read_csv(data_file_path)
使用pathlib模块实现(更简洁)
from pathlib import Path import pandas as pd # 获取当前脚本所在的目录对象 script_dir = Path(__file__).parent.resolve() # 拼接数据文件路径(支持路径运算符) data_file_path = script_dir / 'data' / 'metabolic_syndrome.csv' df = pd.read_csv(data_file_path)
内容的提问来源于stack exchange,提问作者GaëtanLF
相关产品推荐
相关产品推荐

