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

Python不同工作目录下如何获取config.json的正确路径?

Python路径适配问题解决方案

文件结构

Root  
  |---- SubFolder  
  |        |---- generator.py    
  |        |---- config.json        
  |  
  |---- main.py  

现有代码

main.py

import os 

def main():
    from SubFolder.generator import start

    start(__file__)
    
if __name__ == '__main__':
   
    main()

generator.py

import os 
def start(caller: str):

    file_path_s = "./config.json"
    file_path_l = "./SubFolder/config.json"

    exist_s = os.path.exists(file_path_s)
    exist_l = os.path.exists(file_path_l)

    print(f"Caller: {caller}")
    print(f"cwd:{os.getcwd()}")

    print(f"exist {file_path_s}: {exist_s}")
    print(f"exist {file_path_l}: {exist_l}")

if __name__ == '__main__':
    
    start(__file__)

问题描述

  1. generator.start()既可以被main.py调用,也可以直接运行generator.py作为主程序调用
  2. 两种场景下工作目录不同
  3. start()读取config.json时,路径需对应调整:被main.py调用时用./SubFolder/config.json,直接运行generator.py时用./config.json

是否有无需通过判断工作目录的方式来获取正确路径?如何实现?

解决方案

当然有,核心思路是基于generator.py自身的文件位置构建config.json的绝对路径,完全脱离当前工作目录的限制。

修改generator.py代码如下:

import os 

def start(caller: str):
    # 获取generator.py所在文件夹的绝对路径
    generator_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接config.json的完整绝对路径
    config_path = os.path.join(generator_dir, "config.json")
    
    exist = os.path.exists(config_path)
    print(f"Caller: {caller}")
    print(f"cwd:{os.getcwd()}")
    print(f"exist {config_path}: {exist}")

if __name__ == '__main__':
    start(__file__)

原理说明

  • os.path.abspath(__file__):获取当前脚本(generator.py)的绝对磁盘路径,无论脚本是被调用还是直接运行,该值始终指向generator.py的真实位置
  • os.path.dirname(...):从脚本绝对路径中提取其所在文件夹的路径
  • os.path.join(...):将文件夹路径与config.json文件名拼接为完整路径,自动适配Windows、Linux等不同系统的路径分隔符

这种方式无需判断工作目录,不管是从main.py调用还是直接运行generator.py,都能精准定位到目标配置文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:32:08