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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:45:33