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__)
问题描述
generator.start()既可以被main.py调用,也可以直接运行generator.py作为主程序调用- 两种场景下工作目录不同
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
相关产品推荐
相关产品推荐

