python對json格式原檔案追加內容

積極向上的Coder發表於2020-11-17

python對json格式原檔案追加內容

之前有個需求:
要求爬取的資料是json格式的;json格式在 網路資料傳輸中使用很廣泛;
類似於python的字典格式;其本質是字串
但是呢,如果稍微不注意我們會發現我們儲存的格式
不是特別正確會出現如下格式:

{"a": {"password": "123", "status": false, "timeout": 1555380013.9477446}}
{"b": {"password": "123", "status": false, "timeout": 1555380013.9477446}}
{"c": {"password": "123", "status": false, "timeout": 1555380013.9477446}}
{"d": {"password": "123", "status": false, "timeout": 1555380013.9477446}}

這樣的話 使用json格式去載入檔案的話就會報錯
從網上找了很多例子
但是沒有成功;

今天自己偶然的機會,又看了下python操作檔案基礎;這個方法或許可以解決:
直接上程式碼:(方便以後要讀取該json檔案的人,減少程式碼量)

import json

with open('test2.json','a+',encoding="utf-8") as f:
    f.seek(0)  # 因為是追加方式開啟,預設偏移量再最後面,我們調整到開頭
    if f.read() =='':  # 判斷是否為空,如果為空的話建立一個新的字典格式
        print('執行了嗎')
        data = {}
    else:
        f.seek(0)
        data = json.load(f)
    print(data)

    data['a']="我爸是趙四"
    data['b']="我爸是李剛"  # 可以在第二遍執行時修改一下看看效果
    data['e']="我爸是李剛"
    data['f'] = {'a':'巢狀啊'}
    print(data)

    f.seek(0)# 設定檔案當前位置 0代表開始處 其實有兩個引數 offset,whence (whence常用有三個引數0,1,2;0 代表從檔案開頭開始算起,1 代表從當前位置開始算起,2 代表從檔案末尾算起。)
    # 如果操作成功,則返回新的檔案位置,如果操作失敗,則函式返回 -1。
    f.truncate() # 從開頭截斷,截斷檔案為size個字元,無參代表 從當前位置截斷,截斷之後後面的所有字元都被刪除
    json.dump(data,f,indent=2,ensure_ascii=False)

第一次執行:
在這裡插入圖片描述
修改後第二次執行:新增內容
在這裡插入圖片描述

相關文章