Python JSON AttributeError:“ str”对象没有属性“ read”

时间:2020-07-09 03:47:49

标签: python json python-3.x

我是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 个答案:

答案 0 :(得分:1)

首先,您的文件内容不是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字符串的json.loads()

>>> with open('/tmp/a.json', 'r') as f:
...     for i in f:
...             print(json.loads(i))
... 
{'a': 123}

答案 1 :(得分:0)

除了将json扩展名用于非json文件之外,您的代码存在的问题是obj是代码中的字符串,而不是文件,因此应改用json.loads json.load中的。另一方面,如果您知道每一行都是数字,则可以使用int来转换文字整数。