1. 程式人生 > >python: 列表 + 字典 + 向json檔案追加資料

python: 列表 + 字典 + 向json檔案追加資料

在關於影象的深度學習中,我們有影象和對應的標籤。通常我們將影象名字和對應的標籤寫在json檔案中,通過字典的方式進行編碼。我們可以看一個例子:
[{“disease_class”: 1, “image_id”: “1.jpg”},
{“disease_class”: 2, “image_id”: “2.jpg”},
{“disease_class”: 3, “image_id”: “3.jpg”}]
注意到這個最外邊是一個方括號,也就是說整個檔案是一個列表的格式。
列表由很多的很多字典組成,每一個字典都包含兩個鍵值對,一個是圖片的標籤,也就是groundtruth,這裡就是disease_class,另一個就是影象的名字,這裡就是image_id。
這樣寫是有好處的,我這裡就不說是什麼好處的。
本文首先給出如何讀取這樣的一個json檔案:

    with open(validate_path, 'r') as load_f:
        load_dict = json.load(load_f)
        num_image = len(load_dict)
        for image in range(num_image):
            index = load_dict[image]["disease_class"]
            path = load_dict[image]['image_id']
            image_data = cv_imread(path)

主要用到了一個python庫中函式:json 的json.load函式。然後採用列表的方式讀取每一個影象的序列號,再進一步依據字典的鍵值對方式來索引具體的鍵值。

那麼怎樣才能建立這樣的josn檔案呢(從這個例子可以看書,並不是所有的json檔案都是一樣的,josn檔案有它自己的組合方式,看官可以檢視其它人的部落格就知道,但願你看完這篇文章之後能夠找到你想要的json檔案格式的製作)
上面說到,首先是列表,列表中是一個個的字典。
直接先上程式碼:

image_aug = [] # 先建立一個列表
image_path = 'AgriculturalDisease_trainingset'
root = os.getcwd()
path = os.path.join(root, 'new_train', 'new_train_labels.json')
# print(path)
with open(path, 'r') as f:
    load_dict = json.load(f)
    num_images = len(load_dict)

    for image in range(num_images):
        index = load_dict[image]["disease_class"]
        path = load_dict[image]["image_id"]
        image_dict = {"disease_class":index, "image_id":path}
        image_aug.append(image_dict) # 依據列表的append對檔案進行追加

with open('new.json', 'w', encoding='utf-8') as file:
    json.dump(image_aug, file, ensure_ascii=False)
    # 最後根據json的dump將上面的列表寫入檔案,得到最終的json檔案

總結為以下三步:
1)先建立一個列表
2)依據列表的append對檔案進行追加
3)最後根據json的dump將上面的列表寫入檔案,得到最終的json檔案
寫到這裡大家應該是比較理解怎麼對json檔案進行追加的吧。
實際上是利用列表進行追加。