python实践之json文件读取与修改某个值
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
最近做的工作中用到了python读取与修改json文件,在处理json文件时将对象看做字典 将数组看做列表,json就是对象中嵌套列表再嵌套对象的一个可递归的数据结构,处理起来比较麻烦,最初头疼,头疼了一会就想辙了,最终当然是想出辙来了,于是有了这篇文章。
总共的步骤有3步:
- 1 .读取json文件 ,将文件内容变为字典
- 2.在字典中找到特定的值并且修改该位置
- 3 将修改后的字典写入之前的json文件
- 最重要而且最复杂的要数第2步
python操作json文件的方法:
如图所示:可以通过json.dumps()将python数据类型变成json字符串(使用在通过TCP发出去的时候,socket能发字符串但是并不能发列表啊)可以通过json.loads()将json字符串变成python的列表字典,以便于处理里面的内容。
如果操作的是字符串,则可以参考本链接,参考一下其中的选项
https://blog.csdn.net/qq_46293423/article/details/105785007
其中用到的知识点是:嵌套类型的数据 也可以通过索引进行修改:
譬如:
objectDict["COM"][dicNum-1]["Comport"] = comport
其他代码:
import json
class RS485(object):
def __init__(self,parameterDict):
self.comname = parameterDict['ComName']
self.comport = parameterDict['Comport']
self.baudrate = parameterDict['Baudrate']
self.parity = parameterDict['Parity']
self.stopbits = parameterDict['Stopbits']
def motifyJson(self,file):
self.baudrate = 19200
self.parity = "ODD"
self.stopbits = 1.5
with open(file, 'r', encoding='utf-8') as f:
objectDict = json.load(f)
print(objectDict["COM"])
for key in objectDict:
if key == "COM":
portList = objectDict[key]
dicNum = 0
for portDict in portList:
dicNum += 1
for portDictKey in portDict:
if portDict[portDictKey] == self.comname:
#portParameterDict = portDict
objectDict["COM"][dicNum-1]["Comport"] = self.comport
objectDict["COM"][dicNum-1]["Baudrate"] = self.baudrate
objectDict["COM"][dicNum-1]["Parity"] = self.parity
objectDict["COM"][dicNum-1]["Stopbits"] = self.stopbits
print(objectDict["COM"])
with open('GWConfig2.txt', 'w', encoding='utf-8') as f:
json.dump(objectDict, f, ensure_ascii=False, indent=4)
# 可以考虑传入一个字典,通过字典里的数值进行初始化
def getParameterDict(file,type,port):
with open(file,'r',encoding='utf-8') as f:
objectDict = json.load(f)
for key in objectDict:
if key == type:
portList = objectDict[key]
for portDict in portList:
for portDictKey in portDict:
if portDict[portDictKey] == port:
portParameterDict = portDict
return portParameterDict
# print('eth1.ip is:',eth1.ip)
# print('eth1.port is',eth1.port)
RS485Parameter = getParameterDict('GWConfig.txt','COM','COM2')
com1 = RS485(RS485Parameter)
com1.motifyJson('GWConfig.txt')
所用的json文件
{
"ETH":[
{
"EthName" : "eth0",
"ip" : "192.168.137.81",
"port" : 8888
},
{
"EthName" : "eth1",
"ip" : "192.168.135.81",
"port" : 9999
}
],
"COM":[
{
"ComName" : "COM1",
"ComDevice" : "/dev/ttymxc4",
"Comport" : "com4",
"Baudrate" : 9600,
"Parity" : "None",
"Stopbits" : 1
},
{
"ComName" : "COM2",
"ComDevice" : "/dev/ttymxc3",
"Comport" : "com5",
"Baudrate" : 9600,
"Parity" : "None",
"Stopbits" : 1
},
{
"ComName" : "COM3",
"ComDevice" : "/dev/ttymxc2",
"Comport" : null,
"Baudrate" : 9600,
"Parity" : "None",
"Stopbits" : 1
}
]
}
- 总结:操作json重点:
- 1.花括号内为对象 – 字典 方括号内为数组 – 列表
- 2.读取和保存json文件的方法:
with open('GWConfig.txt', 'r', encoding='utf-8') as f:
ret_dic = json.load(f)
with open('GWConfig2.txt', 'w', encoding='utf-8') as f:
json.dump(ret_dic, f, ensure_ascii=False, indent=4)
- 3.在读取json文件之后 需要将json当做嵌套的字典列表处理,操作起来比较方便 只要认清数据的结构类型即可方便的操作
- 4.嵌套多少都不要慌,只要定位到索引就可以轻松修改原值,定位索引的方式 字典找key 列表找index
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
3 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献2条内容
所有评论(0)