Python - не могу импортировать из JSON? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть один класс, выгружающий список, содержащий строки, в файл .json, и другой класс, загружающий этот файл.Однако я получаю странные ошибки, которые я не понимаю - это содержимое файла .json (пример): ["1", "1", "1", "1", "1", "1", "1", "11", "1", "1", "1.1.1.1", "11.11.11.11"]

Это код, который читает файл .json в другом классе:

 with open('test.json','a+') as infile:
        if os.stat('test.json').st_size != 0:
            jsonimport = json.load(infile)

Я думал, что open () в Python не создает файл, если он не существует связан, но я не читаю файл нормально, а вместо этого использую JSON для загрузки данных...

Это ошибка:

    File "C:\Users\Administrator\Documents\QTTestGIT\IPv4calc.py", line 12, in __init__
    self.CallPrompt()
  File "C:\Users\Administrator\Documents\QTTestGIT\IPv4calc.py", line 18, in CallPrompt
    jsonimport = json.load(infile)
  File "C:\Program Files\Python36\lib\json\__init__.py", line 299, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\Program Files\Python36\lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files\Python36\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files\Python36\lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Process finished with exit code 1

1 Ответ

0 голосов
/ 04 октября 2018

Не работает, потому что вы используете режим a+ для открытия файла.

json.load использует метод .read переданного файлового объекта.Поскольку вы используете режим a+, .read вернет пустую строку (что имеет смысл, поскольку курсор будет находиться в конце файла).

Измените режим на r (или нене предоставляйте любой режим, r по умолчанию) и ваш код будет работать.

В качестве альтернативы, вы можете позвонить infile.seek(0) перед вызовом json.load, но тогда я не вижу смысла в использовании a+ режим для начала.

import json

file_name = 'test.json'

with open(file_name, 'a+') as infile:
    if os.stat(file_name).st_size != 0:
        infile.seek(0)
        print(json.load(infile))
        # ['1', '1', '1', '1', '1', '1', '1', '11', '1', '1', '1.1.1.1', '11.11.11.11']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...