当我使用 json.load() 方法时,为什么 Python3 无法处理位于同一目录中的 json 文件

Why doesn't Python3 fine a json-file which is in the same directory when I use the json.load() method

我正在学习 Python3 并且我正在尝试通过从 JSON 文件启动它的属性来创建对象代理(自定义对象)。

问题是当我启动我的 python 文件时,它没有找到位于同一目录中的文件。我检查了名字,没有错字。我不明白问题到底出在哪里。

这是我的文件夹结构:

project/
    model.py
    agents-100k.json

这是我的 model.py 文件

import json


class Agent:
    def __init__(self, **agent_attributes):
        """Constructor of Agent class"""

        # Print each element of dict
        print(agent_attributes.items())

        # Get the name and the value of each entry in dict
        for attr_name, attr_value in agent_attributes.items():
            # setattr(instance, attribute_name, attribute_value)
            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():
    for agent_attributes in json.load(open("agents-100k.json")):
        agent = Agent(**agent_attributes)
        print(agent.agreeableness)

main()

这是 agents-100k.json 文件的示例(条目很多,所以我只显示其中两个):

[
  {
    "age": 84,
    "agreeableness": -0.8437190198916452,
    "conscientiousness": 0.6271643010309115,
    "country_name": "China",
    "country_tld": "cn",
    "date_of_birth": "1933-12-27",
    "extraversion": 0.3229563709288293,
    "id": 227417393,
    "id_str": "bNn-9Gc",
    "income": 9881,
    "internet": false,
    "language": "Standard Chinese or Mandarin",
    "latitude": 33.15219798270325,
    "longitude": 100.85840672174572,
    "neuroticism": 0.15407262417068612,
    "openness": 0.041970542572878806,
    "religion": "unaffiliated",
    "sex": "Male"
  },
  {
    "age": 6,
    "agreeableness": -0.40747441203817747,
    "conscientiousness": 0.4352286422343134,
    "country_name": "Haiti",
    "country_tld": "ht",
    "date_of_birth": "2011-12-21",
    "extraversion": 1.4714618156987345,
    "id": 6821129477,
    "id_str": "bt3-xj9",
    "income": 1386,
    "internet": false,
    "language": "Creole",
    "latitude": 19.325567983697297,
    "longitude": -72.43795260265814,
    "neuroticism": -0.4503674752682471,
    "openness": -0.879092424231703,
    "religion": "Protestant",
    "sex": "Female"
  },
...
]

最后,这是我在 运行 python3 project/model.py:

时得到的错误
Traceback (most recent call last):
  File "project/model.py", line 50, in <module>
    for agent_attributes in json.load(open("agents-100k.json")):
IOError: [Errno 2] No such file or directory: 'agents-100k.json'

我是不是做错了什么?

谢谢你的帮助。

Python 打开相对于脚本执行位置的文件。所以如果你 运行 带有 project/model.py 的文件 json 应该在项目文件夹之外。

如果 json 始终包含在与 python 文件相同的文件夹中,您可以使用以下代码打开文件:

import json
import os

path = os.path.dirname(os.path.abspath(__file__))
import jso


def main():
    for agent_attributes in json.load(open(os.path.join(path, "agents-100k.json")):
        agent = Agent(**agent_attributes)
        print(agent.agreeableness)

main()

This question 对它的工作原理给出了更详细的解释。