如何在Python中基于脚本相对路径加载文件?
跨目录运行Python脚本时的文件路径加载问题
目录结构
./outputsetting.json ./myapp/app.py
问题场景
现有app.py中加载配置文件的代码如下:
with open("..\outputpath.json","r") as f: j=json.load(f)
- 在
myapp目录下执行python app.py,代码正常运行 - 在父目录下执行
python .\myapp\app.py,触发错误:
FileNotFoundError: [Errno 2] No such file or directory: '..\\outputpath.json'
需求:基于app.py自身的位置加载文件,实现任意目录下运行脚本都无需修改代码。
解决方案
核心逻辑是:先获取脚本自身的绝对路径,再以此为基准拼接配置文件路径,彻底摆脱运行时工作目录的影响。
推荐实现代码
修改app.py中的代码如下:
import os import json # 获取当前脚本的绝对路径 script_abspath = os.path.abspath(__file__) # 获取脚本所在的目录 script_dir = os.path.dirname(script_abspath) # 拼接配置文件的路径:脚本目录的父目录 + 目标文件名 config_path = os.path.join(script_dir, "..", "outputsetting.json") # 规范化路径,自动处理../这类相对标记 config_path = os.path.normpath(config_path) with open(config_path, "r") as f: j = json.load(f)
注意事项
- 你原代码中配置文件名写的是
outputpath.json,但实际文件是outputsetting.json,已在代码中修正,需保持文件名一致 os.path.normpath会将路径转为系统标准格式,避免跨平台路径问题- 无论从哪个目录执行脚本,该方法都能精准定位到配置文件
内容的提问来源于stack exchange,提问作者user2155362
相关产品推荐
相关产品推荐

