第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么更改為“w+”模式同時(shí)讀取和寫(xiě)入文件會(huì)導(dǎo)致讀取失???

為什么更改為“w+”模式同時(shí)讀取和寫(xiě)入文件會(huì)導(dǎo)致讀取失敗?

動(dòng)漫人物 2022-11-09 14:47:24
我正在用 Python 編寫(xiě)代碼,需要通過(guò) RFID 標(biāo)簽注冊(cè)用戶(hù)并將該記錄寫(xiě)入文件。我設(shè)法編寫(xiě)了一個(gè)運(yùn)行良好的函數(shù):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)但我想盡可能優(yōu)化代碼,減少行數(shù)。因此,我決定使用它,w+因?yàn)樗鼞?yīng)該能夠同時(shí)讀取和寫(xiě)入文件。這是“優(yōu)化”的代碼: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)“優(yōu)化”代碼不起作用,它給出了這個(gè)錯(cuò)誤: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": []}有人能告訴我為什么會(huì)這樣嗎?
查看完整描述

2 回答

?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

以模式打開(kāi)文件會(huì)w+截?cái)嗨虼艘坏┠鷩L試這樣做,就沒(méi)有什么可讀取的了。此模式旨在讓您在打開(kāi)文件后返回并閱讀您所寫(xiě)的內(nèi)容。

由于您必須閱讀該文件,因此您需要以r模式打開(kāi)它。由于您想稍后替換整個(gè)內(nèi)容,因此您必須截?cái)嗨⒁?code>w模式打開(kāi)它。所以,請(qǐng)繼續(xù)使用您的原始版本!


查看完整回答
反對(duì) 回復(fù) 2022-11-09
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

正如蒂埃里所說(shuō),w+截?cái)辔募獎(jiǎng)h除數(shù)據(jù)——因此沒(méi)有可讀取的內(nèi)容。


使用另一種讀/寫(xiě)模式打開(kāi)文件, r+-- 句柄設(shè)置為文件的開(kāi)頭,然后添加一個(gè)f.seek(0),您的代碼將正常工作。


    with open(self._RECORDS_FILE_PATH, 'r+') as f:

        recordsData = json.load(f)

        newRecord = {

            "timestamp": int(round(time.time() * 1000)),

            "rfid": rfid

        }

        recordsData["recordsList"].insert(0, newRecord)

        f.seek(0) # go back to beginning of file 

        json.dump(recordsData, f)


查看完整回答
反對(duì) 回復(fù) 2022-11-09
  • 2 回答
  • 0 關(guān)注
  • 239 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)