引言
json模块在深度学习模型的运行过程中起着非常重要的作用,存储模型运行的配置信息。如何将python字典对象变成json格式字符串或直接写入json文件,以及如何从json文件中读取配置信息,是本文主要关注的重点。
目录
一、json.dumps()和json.dump()
1.json.dumps()
语法
json.dumps(obj)
把python字典对象变成json格式的字符串并返回该字符串。
示例代码
(1)将一个python字典对象转换成json格式字符串
import json
data = {"orange":6,"apple":1,"banana":3}
print(f"数据类型为{type(data)}") #<class 'dict'>
json_str = json.dumps(data)
print(json_str) #{"orange": 6, "apple": 1, "banana": 3}
print(f"数据类型为{type(json_str)}") #<class 'str'>
将python对象转换成json格式的字符串,如果想输出格式更美观可以设置indent参数缩进数据,设置sort_keys=true,按照键名排序。
(2)将多个python字典对象逐个存储于txt文件中
import json
#将列表中的字典对象逐个写入文件,并对每个键拼接前缀类别信息fruit_
dict_list = [{"orange":6,"apple":1,"banana":3},{"strawberry":4,"pear":5}]
with open("data.txt",mode='a') as file:
for dict_elem in dict_list:
log_stats = {f"fruit_{k}":v for k,v in dict_elem.items()}
file.write(json.dumps(log_stats) + '\n') #实验数据写入日志文件
#结果
{"fruit_orange": 6, "fruit_apple": 1, "fruit_banana": 3}
{"fruit_strawberry": 4, "fruit_pear": 5}
2.json.dump()
语法
json.dump(obj,fp)
直接将python字典对象写进json文件,没有任何返回值。obj参数为python字典对象,fp参数为文件路径字符串。
示例代码
(1)将一个python字典对象存入文件
data = {"orange":6,"apple":1,"banana":3}
with open('./data.json','w') as f:
json.dump(data,f)
(2) 将多个python字典对象逐个存储于txt文件中
#将列表中的多个字典对象逐个写入文件
dict_list = [{"orange":6,"apple":1,"banana":3},{"strawberry":4,"pear":5}]
with open("data.txt",mode='a') as file:
for dict_elem in dict_list:
log_stats = {**{f"fruit_{k}":v for k,v in dict_elem.items()},}
json.dump(log_stats,file) #将实验结果存入文件file中
file.write('\n') #每条实验结果后追加换行
#结果
{"fruit_orange": 6, "fruit_apple": 1, "fruit_banana": 3}
{"fruit_strawberry": 4, "fruit_pear": 5}
二、json.loads()和json.load()
1.json.loads()
语法
json.loads(s)
与dumps函数功能相反主要是将json格式字符串转换成python字典对象。
示例代码
json_str = "{'orange': 6, 'apple': 1, 'banana': 3}"
python_obj = json.loads(json_str)
print(python_obj) #{'orange': 6, 'apple': 1, 'banana': 3}
print(f"数据类型为{type(python_obj)}") #<class 'dict'>
2.json.load()
语法
json.load(fp)
直接从json文件中加载python字典对象, fp参数为文件路径。
示例代码
with open('./data.json','r') as f:
dict_obj = json.load(f)
print(dict_obj) # {'orange': 6, 'apple': 1, 'banana': 3}
print(type(dict_obj)) # #<class 'dict'>
三、总结
1.字符串操作:json.dumps()是将python对象变成json格式字符串,而json.loads()功能与其相反是从字符串中获得json数据并变成python字典对象。
2.文件操作:json.dump()是将python对象直接写入json文件中,而json.load()是从文件中读取出json数据转换成python字典对象。
3.在工程项目中,将多个字典对象写入txt日志文件用于保存实验记录时,经常用json.dumps()将数据变成符合存储要求的字符串,用file.write()函数把处理后的json字符串写入文件。json.dump()则对处理后的数据记录直接处理写入文件,没有换行功能需要追加一行file.write('\n')。