Python程序无法找到JSON文件?跨Windows/Mac平台适配求助
问题分析与解决办法
你的核心问题是误解了Python中相对路径的基准:Python里的相对路径是基于当前工作目录(也就是你启动程序时所在的目录),而不是脚本文件本身的目录。
你之前尝试加../或..\\之所以失败,是因为运行main.py时,当前工作目录是project/,这时候../saved_data.json会指向project的上级目录,自然找不到目标文件;而直接写saved_data.json理论上在工作目录是project/时应该能找到,但这种写法依赖固定的启动目录,不够健壮(比如IDE运行配置可能修改工作目录,或者你从其他目录启动程序)。
跨平台可靠解决方案
推荐用pathlib模块(Python 3.4+自带)来构建绝对路径,它会自动处理Windows和Mac的路径分隔符,无需手动写/或\:
修改src/resources.py的代码:
import json from pathlib import Path def load_json(): # 获取当前resources.py文件所在的目录 src_dir = Path(__file__).parent # 往上跳一级到project目录,再拼接JSON文件名 json_file_path = src_dir.parent / "saved_data.json" with open(json_file_path, 'rt') as file_in: stored_text = file_in.read() stored_json = json.loads(stored_text) # parse stored_json & return created objects
如果你习惯用os.path模块,也可以这样写:
import json import os def load_json(): # 获取resources.py的绝对路径 script_abspath = os.path.abspath(__file__) # 获取src目录的路径 src_dir = os.path.dirname(script_abspath) # 构建JSON文件的路径,标准化后消除../这类相对标识 json_file_path = os.path.normpath(os.path.join(src_dir, "..", "saved_data.json")) with open(json_file_path, 'rt') as file_in: stored_text = file_in.read() stored_json = json.loads(stored_text) # parse stored_json & return created objects
为什么这个方案有效
这种写法完全不依赖启动程序时的工作目录,而是基于resources.py本身的位置来定位saved_data.json,不管你在Windows还是Mac,不管从哪个目录启动程序,都能精准找到目标文件。
内容的提问来源于stack exchange,提问作者redpepper74
相关产品推荐
相关产品推荐

