Python JSON AttributeError: объект 'str' не имеет атрибута 'read' - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в Python. Python 3.7.6

import json
fil='numbers.json'
num=[]
with open(fil,'r') as file :
    for obj in file :
        num.append(json.load(obj))
print(num)

Это файл JSON:

"45""56""78""75"

Это ошибка, которую я получаю при запуске кода

Traceback (most recent call last):
  File "C:/Users/Dell/PycharmProjects/untitled/tetu.py", line 6, in <module>
    num.append(json.load(obj))
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 293, in load
    return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'

Есть идеи, как это исправить?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Во-первых, содержимое вашего файла не json.

Учитывая допустимое json содержимое файла /tmp/a.json:

{"a": 123}

json.load() принимает объект файла, например:

>>> import json
>>> with open('/tmp/a.json', 'r') as f:
...     data = json.load(f)
...     print(data)
... 
{'a': 123}

Ваша ошибка возникает из-за итерации файлового объекта, который считывает каждую строку в строку

>>> with open('/tmp/a.json', 'r') as f:
...     for i in f:
...             print(i.__class__)
... 
<class 'str'>

В этом случае вам нужно будет использовать json.loads(), который принимает строку json

>>> with open('/tmp/a.json', 'r') as f:
...     for i in f:
...             print(json.loads(i))
... 
{'a': 123}
0 голосов
/ 09 июля 2020

Не говоря уже об использовании расширения json для файла, отличного от json, проблема с вашим кодом заключается в том, что obj является строкой в ​​вашем коде, а не файлом, поэтому вы должны использовать json.loads вместо из json.load. С другой стороны, если вы знаете, что каждая строка представляет собой число, вы можете преобразовать буквальное целое число в int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...