簡體   English   中英

使用 python 更新 JSON 文件中的特定值

[英]Update specific value in JSON file with python

我從 python 腳本更新我的 JSON 文件時遇到問題。 我的 JSON 文件”:

{"domains": 
    [
        {"name": "example1.com", "type": "mail", "category": "good", "count": 0}, 
        {"name": "example1.com", "type": "mail", "category": "bad"}, 
        {"name": "exampless.com", "type": "mail", "category": "good", "count": 13}
    ]
}

我嘗試更新“計數”,但僅在“名稱”特定的地方

我試試這段代碼:

def redJSONlist(filename)
    with open(filename) as f:
        data = json.load(f)
    return data

def updateJSONdata(data, filename)
    filename.seek(0)
    json.dump(data, filename)
    filename.truncate()

l = redJSONlist("data.json")
for i in l['domains']:
    if(i['name'] == "exampless.com"):
        ile = i['count']
        i['count'] = ile + 1
        updateJSONdata(l, "data.json")

我收到錯誤: AttributeError: 'str' object has no attribute 'seek'

.seek.write是文件 object 的方法,但您嘗試在字符串類型上調用它們,這會導致錯誤。

你想通過.seek(0)? - 如果是在第一個字節設置文件讀取,則不需要,python 在打開時自動執行

您可能正在尋找這樣的東西:

data = {"abc" : "efg"}
filename = "data.json"
with open(filename) as file:
  file.write(data)
  print(type(file))
  print(type(filename))

打印件將幫助您了解文件和文件名類型之間的區別

您的代碼有幾個問題:

  1. 您缺少冒號:在 function 定義的末尾: def updateJSONdata(data, filename)

  2. filename變量是string類型,但您嘗試對其調用.seek(0) ,這是一種文件方法。 您在updateJSONdata function 中實際需要做的是打開具有給定文件名的filename ,運行json.dump並關閉它。 以下代碼段應該有效:

def updateJSONdata(data, filename):
    with open(filename, "w") as file: # the "w" option opens the file in write mode
        json.dump(data, file)

請注意, with塊將為您執行資源清理(文件關閉)。

我在 Python 文件處理中包含一個資源供您進一步參考: Python 文件處理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM