Python3使用json.load()无法读取同目录JSON文件的问题求助
问题分析与解决方案
你遇到的核心问题是Python解析相对路径时,参考的是你运行脚本时的「当前工作目录」,而不是脚本文件本身所在的目录。
当你在project文件夹的上层目录执行python3 project/model.py时,你的当前工作目录是project的父文件夹,代码里的"agents-100k.json"会尝试在这个父文件夹里查找,自然找不到实际存放在project文件夹里的文件。
这里有几个靠谱的解决办法:
方法1:切换到脚本所在目录后运行
最简单的方式是先进入project文件夹,再执行脚本:
cd project python3 model.py
这样当前工作目录和脚本、JSON文件所在目录一致,相对路径就能正确解析。
方法2:在代码中使用脚本目录的绝对路径(推荐)
如果你希望不管从哪个目录都能正常运行脚本,可以通过代码动态获取脚本所在的目录,再拼接JSON文件的完整路径。修改你的model.py代码如下:
import json import os # 新增导入os模块 class Agent: def __init__(self, **agent_attributes): """Constructor of Agent class""" print(agent_attributes.items()) for attr_name, attr_value in agent_attributes.items(): setattr(self, attr_name, attr_value) def say_hello(self, first_name): """Say hello to name given in argument""" return "Hello " + first_name + "!" def main(): # 获取当前脚本的绝对路径 script_path = os.path.abspath(__file__) # 获取脚本所在的目录 script_dir = os.path.dirname(script_path) # 拼接JSON文件的完整路径 json_file_path = os.path.join(script_dir, "agents-100k.json") with open(json_file_path, 'r') as f: # 改用with语句更安全,自动关闭文件 for agent_attributes in json.load(f): agent = Agent(**agent_attributes) print(agent.agreeableness) main()
代码说明:
os.path.abspath(__file__):获取当前model.py文件的绝对路径os.path.dirname(script_path):从绝对路径中提取出文件所在的目录(也就是project文件夹)os.path.join():安全地拼接目录和文件名,避免手动拼接路径时出现的跨平台问题(比如Windows用\,Linux用/)- 改用
with open(...)语句:相比直接open(),它会在代码块结束后自动关闭文件,更符合Python的最佳实践。
方法3:直接使用绝对路径(不推荐)
你也可以直接把JSON文件的完整绝对路径写在代码里,比如:
json.load(open("/home/xxx/project/agents-100k.json"))
但这种方式不够灵活,一旦你移动了项目文件夹或者换了电脑,就需要手动修改路径,所以不推荐使用。
内容的提问来源于stack exchange,提问作者Bravo2bad




