Я пишу код в Python, который должен регистрировать пользователя по RFID-метке и записывать эту запись в файл.
Мне удалось написать функцию, которая отлично работает:
def register_user(self, rfid):
with open(self._RECORDS_FILE_PATH, 'r') as infile:
recordsData = json.load(infile)
with open(self._RECORDS_FILE_PATH, 'w+') as outfile:
newRecord = {
"timestamp": int(round(time.time() * 1000)),
"rfid": rfid
}
recordsData["recordsList"].insert(0, newRecord)
json.dump(recordsData, outfile)
Но хотелось бы максимально оптимизировать код и уменьшить количество строк. Из-за этого я решил использовать w+
, потому что он должен разрешать чтение и запись файла одновременно.
Это «оптимизированный» код:
def register_user(self, rfid):
with open(self._RECORDS_FILE_PATH, 'w+') as file:
recordsData = json.load(file)
newRecord = {
"timestamp": int(round(time.time() * 1000)),
"rfid": rfid
}
recordsData["recordsList"].insert(0, newRecord)
json.dump(recordsData, file)
«Оптимизированный» код не работает и выдает эту ошибку:
Traceback (most recent call last):
File "/home/pi/accessControl/accessControlClasses/userInfoApi.py", line 57, in register_user_offline
recordsData = json.load(outfile)
File "/usr/lib/python2.7/json/__init__.py", line 291, in load
**kw)
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Файл, в котором будут сохраняться записи:
{"recordsList": []}
Может кто-нибудь сказать мне, почему это происходит?