Почему Python3 не штрафует json -файл, который находится в том же каталоге, когда я использую метод json .load () - PullRequest
0 голосов
/ 30 марта 2020

Я изучаю 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'

Есть что-то, что я сделал не так?

В любом случае спасибо за вашу помощь.

1 Ответ

1 голос
/ 30 марта 2020

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()

Этот вопрос дает более подробное объяснение того, как он работает.

...