Python實(shí)現(xiàn)將字典內(nèi)容寫入json文件
Python中有序字典和無序字典,一鍵多值字典。
Python將字典內(nèi)容寫入json文件。
1、無序字典
目前了解三種,在Python中直接默認(rèn)的是無序字典,這種不會按照你插入的順序排序,即使你對字典排序后,返回的也是一個list變量,而不是字典,倘若你將這個list字典后,又會變回?zé)o序字典。
例子如下:
import operator x = {"label": "haha", "data": 234, "score": 0.3} sorted_x = sorted(x.items(), key=operator.itemgetter(0)) print x print type(x) print sorted_x print type(sorted_x) print dict(sorted_x)
2、有序字典
如果我們想保持字典按照我們插入的順序有序怎么辦?可以用OrderedDict來初始化字典。
例子如下:
from collections import OrderedDict x = OrderedDict() x["label"] = "haha" x["data"] = 234 x["score"] = 0.3 print x print type(x)
3、一鍵多值字典
如果我們想用一鍵多值字典怎么辦,可以使用defaultdict,例子如下:
from collections import defaultdict video = defaultdict(list) video["label"].append("haha") video["data"].append(234) video["score"].append(0.3) video["label"].append("xixi") video["data"].append(123) video["score"].append(0.7) print video print type(video)
4、寫入json
字典內(nèi)容寫入json時,需要用json.dumps將字典轉(zhuǎn)換為字符串,然后再寫入。
json也支持格式,通過參數(shù)indent可以設(shè)置縮進(jìn),如果不設(shè)置的話,則保存下來會是一行。
例子:
4.1 無縮進(jìn)
from collections import defaultdict, OrderedDict import json video = defaultdict(list) video["label"].append("haha") video["data"].append(234) video["score"].append(0.3) video["label"].append("xixi") video["data"].append(123) video["score"].append(0.7) test_dict = { 'version': "1.0", 'results': video, 'explain': { 'used': True, 'details': "this is for josn test", } } json_str = json.dumps(test_dict) with open('test_data.json', 'w') as json_file: json_file.write(json_str)
4.2 有縮進(jìn)
from collections import defaultdict, OrderedDict import json video = defaultdict(list) video["label"].append("haha") video["data"].append(234) video["score"].append(0.3) video["label"].append("xixi") video["data"].append(123) video["score"].append(0.7) test_dict = { 'version': "1.0", 'results': video, 'explain': { 'used': True, 'details': "this is for josn test", } } json_str = json.dumps(test_dict, indent=4) with open('test_data.json', 'w') as json_file: json_file.write(json_str)
方法補(bǔ)充
下面是參考上文代碼整理出的另一種實(shí)現(xiàn)方法,可以參考一下
""" 將整個數(shù)據(jù)集分為train和test,相應(yīng)的也分別分配整個json文件 """ import os import random import json total_select_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan_select" total_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan.json" test_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\test\has_yiliuwu\yuedongguan_test" test_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\test\has_yiliuwu\yuedongguan_test\yuedongguan_test.json" train_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan" train_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan\yuedongguan.json" data = json.load(open(total_json_path))["labels"] # test_data = json.load(open(test_json_path))["labels"] all_select_path = os.listdir(total_select_path) all_file_path = [] # 待分配的圖片路徑 for item in all_select_path: file_path = os.path.join(total_select_path, item) all_file_path.append(file_path) # print(all_file_path) idx = [i for i in range(len(all_select_path))] random.shuffle(idx) # 在idx上改變 def copy_dir(src_path, target_path): # src_path原文件,target_path目標(biāo)文件 if os.path.isdir(src_path) and os.path.isdir(target_path): filelist_src = os.listdir(src_path) for file in filelist_src: path = os.path.join(os.path.abspath(src_path), file) if os.path.isdir(path): path1 = os.path.join(os.path.abspath(target_path), file) if not os.path.exists(path1): os.mkdir(path1) copy_dir(path, path1) else: with open(path, 'rb') as read_stream: contents = read_stream.read() path1 = os.path.join(target_path, file) with open(path1, 'wb') as write_stream: write_stream.write(contents) return True else: return False test_data_dir = {"labels": []} for item in idx[:41]: with open(all_file_path[item], 'rb') as read_stream: contents = read_stream.read() path1 = os.path.join(test_path, all_file_path[item].split("\\")[-1]) # 測試集圖片的路徑 with open(path1, 'wb') as write_stream: write_stream.write(contents) for s in data: if s["filename"].split("\\")[-1] == all_file_path[item].split("\\")[-1]: test_data_dir["labels"].append(s) # print(s) json_test_str = json.dumps(test_data_dir, indent=4) with open(test_json_path, 'w') as json_file: json_file.write(json_test_str) print(test_data_dir) print(len(test_data_dir["labels"])) print("*"*30) train_data_dir = {"labels": []} for item in idx[41:]: with open(all_file_path[item], 'rb') as read_stream: contents = read_stream.read() path2 = os.path.join(train_path, all_file_path[item].split("\\")[-1]) with open(path2, 'wb') as write_stream: write_stream.write(contents) for s1 in data: if s1["filename"].split("\\")[-1] == all_file_path[item].split("\\")[-1]: train_data_dir["labels"].append(s1) json_train_str = json.dumps(train_data_dir, indent=4) with open(train_json_path, 'w') as json_file: json_file.write(json_train_str) print(train_data_dir) print(len(train_data_dir["labels"])) # print(s)
以上就是Python實(shí)現(xiàn)將字典內(nèi)容寫入json文件的詳細(xì)內(nèi)容,更多關(guān)于Python字典寫入json的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,無序鏈表詳解
這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03Python數(shù)據(jù)結(jié)構(gòu)與算法之算法分析詳解
算法分析的主要目標(biāo)是從運(yùn)行時間和內(nèi)存空間消耗等方面比較算法。本文將為大家詳細(xì)介紹Python數(shù)據(jù)結(jié)構(gòu)與算法中的算法分析,需要的可以參考一下2021-12-12python對站點(diǎn)數(shù)據(jù)做EOF且做插值繪制填色圖
這篇文章主要介紹了python對站點(diǎn)數(shù)據(jù)做EOF且做插值繪制填色圖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,,需要的小伙伴可以參考一下2022-09-09Python的數(shù)據(jù)類型與標(biāo)識符和判斷語句詳解
在本篇文章里小編給大家整理了一篇關(guān)于python數(shù)據(jù)類型與標(biāo)識符和判斷語句的介紹,有需要的朋友們可以學(xué)習(xí)下,希望能夠給你帶來幫助2021-09-09新手入門學(xué)習(xí)python Numpy基礎(chǔ)操作
這篇文章主要介紹了新手入門學(xué)習(xí)python Numpy基礎(chǔ)操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03Python+Turtle實(shí)現(xiàn)繪制可愛的小倉鼠
肉嘟嘟的小動物很是可愛,這篇文章主要為大家介紹一下如何運(yùn)用Python中的turtle庫控制函數(shù)繪制小倉鼠,文中的實(shí)現(xiàn)方法講解詳細(xì),感興趣的可以嘗試一下2022-10-10Python的dict字典結(jié)構(gòu)操作方法學(xué)習(xí)筆記
這篇文章主要介紹了Python的dict字典結(jié)構(gòu)操作方法學(xué)習(xí)筆記本,字典的操作是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-05-05