最近做的工作中用到了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:
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
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
最近做的工作中用到了python读取与修改json文件,在处理json文件时将对象看做字典 将数组看做列表,json就是对象中嵌套列表再嵌套对象的一个可递归的数据结构,处理起来比较麻烦,最初头疼,头疼了一会就想辙了,最终当然是想出辙来了,于是有了这篇文章。总共的步骤有3步:1 .读取json文件 ,将文件内容变为字典2.在字典中找到特定的值并且修改该位置3 将修改后的字典写入之前的json文件最重要而且最复杂的要数第2步其中用到的知识点是:嵌套类型的数据 也可以通过索引进行修改:譬如:
Python创建图形用户界面(GUI graphical user interface),推荐PySimpleGUI。
理由:我们很多时候只是想有个界面罢了,并不太在乎美观程度,也不希望花太多时间去专门学习一个 GUI 库,因为我们有太多需要学习的了。那么 PySimpleGUI 是非常好的选择。
安装方法:pip install pysimplegu
参考文章:https://blog.csdn.net/qq_38343151/article/details/104865640https://blog.csdn.net/qq_38343151/article/details/104865640
一、简单json文件的修改
二、修改json中数组对象中的值
一、简单json文件的修改
编辑前的文件,code值为200
编辑后的文件,code值为404
import json
# 获取json里面数..
需求:读取本地的json 文件,并修改制定的键的值,本文主要改写{'resType':'rest'} 成{'resType':'rect'}
本函数需要给定读取文件的路径以及保存的文件的路径,直接上代码。有问题请留言
# import module
import os
import json
def rest_rect(file_old,file_new):
filen...
获取所需标签名“person”所对应的文件名,csv文档
获取文档名,一个读取该文件名下的标签图片Annotations,一个读取json文件所对应的标签,每一个标签下的数值生成列表
读取列表下key所对应Annotations下的图片,另外,生成一个全零矩阵,以及新的文件夹,用来存放同文档名同图片名,并创建一个矩阵用来存放新图片的数值
如果该图片已经在该路径下存在,读取该图片的值(只修改对应位置的像素值),如果不存在,则将该矩阵保存为图片
将标签名下的数值保存为列表,依次读取列表中键值,将标签名.