第一篇blog,记录科研路上的各种问题和解决方案,虽然有点晚了,但是还是该记录一下留作纪念
为了使工序连接,本打算建一个小的本地数据库进行数据的统一管理,但是master说这么点数据不需要用数据库,直接用文本储存就行。于是就选择了json文件作为数据储存交换的媒介。
用的是 python-based pyomo 来进行科学计算,数据的储存连接通过data.json来完成
json 读取
with open("../data.json", 'r', encoding='utf-8') as file: coking = json.load(file) Coke_out = coking['Coking'][0]['Variable']['coal20_in']['Value'] print(Coke_out)有一个很细节的地方,json数据格式是list和tuple混杂的,list引用是要用到index的,要不然无法引用
还有一个细节的地方,当json.load()执行后,print()出来的样式是在一行内打印的,想要获得规整的输出格式,如下图
{
"Coking": [
{
"Variable": {
"coal9_in": {
"Value": 2.9308557424879663e-08
},
"coal19_in": {
"Value": 5.197732782413522e-08
},
"coal13_in": {
"Value": 9.31265797792923e-08
},
"COG_out": {
"Value": 287.59125690789995
},
"K_coal": {
"Value": 0.8150368619308117
},
"coal18_in": {
"Value": 5.46809011201378e-08
},
"Ad_coke": {
"Value": 0.08628998425872826
},
"coal3_in": {
"Value": 9.31265797792923e-08
},
"Al2O3_coke_Ratio": {
"Value": 0.042282092286776846
},
"coal20_in": {
"Value": 0.5
},
"N2_coke_Ratio": {
"Value": 0.004445458100246247
},
"Vdaf_coke": {
"Value": 0.013892056563269523
},
"coal16_in": {
"Value": 5.602780301213676e-07
},
"coal10_in": {
"Value": 142.97118962379216
},
"BFG_Consum": {
"Value": 16.456410451576275
},
"coal2_in": {
"Value": 7.053576681297877e-08
},
"coal14_in": {
"Value": 2.9308557424879663e-08
},
"SiO2_coke_Ratio": {
"Value": 0.03710469323125315
},
"Coke_heatValue": {
"Value": 29169.49925193674
},
"Ad_coal": {
"Value": 0.10786248032341031
},
"coal17_in": {
"Value": 220.97087617030036
},
"Electric_Consum": {
"Value": 57.43203342116799
},
"H2_coke_Ratio": {
"Value": 0.004584378665878943
},
"Tar_out": {
"Value": 17.724511869001542
},
"coal6_in": {
"Value": 4.9357934174621755e-08
},
"coal15_in": {
"Value": 5.167176148347224e-08
},
"S_coke": {
"Value": 0.004
},
"W_coke": {
"Value": 0.049077528734272485
},
"Mt_coal": {
"Value": 0.08
},
"CaO_coke_Ratio": {
"Value": 0.004918529102747511
},
"Vdaf_coal": {
"Value": 0.2461421345020188
},
"coal5_in": {
"Value": 5.197732782413522e-08
},
"coal4_in": {
"Value": 5.167176148347224e-08
},
"coal12_in": {
"Value": 19.246859284358983
},
"coal1_in": {
"Value": 19.246859284359026
},
"Std_coal": {
"Value": 0.00815034825029823
},
"coal8_in": {
"Value": 1.0037925735979965e-07
},
"coal_in": {
"Value": 402.4357858158342
},
"C_coke": {
"Value": 0.8467404404403378
},
"coal7_in": {
"Value": 5.2296869530381416e-08
},
"Vd_coal": {
"Value": 0.2195926333625311
},
"COG_Consum": {
"Value": 13.476723869824669
},
"coal11_in": {
"Value": 5.46809011201378e-08
},
"Ben_out": {
"Value": 0.9750715307937867
}
}
}
]
}
"Coking": [
{
"Variable": {
"coal9_in": {
"Value": 2.9308557424879663e-08
},
"coal19_in": {
"Value": 5.197732782413522e-08
},
"coal13_in": {
"Value": 9.31265797792923e-08
},
"COG_out": {
"Value": 287.59125690789995
},
"K_coal": {
"Value": 0.8150368619308117
},
"coal18_in": {
"Value": 5.46809011201378e-08
},
"Ad_coke": {
"Value": 0.08628998425872826
},
"coal3_in": {
"Value": 9.31265797792923e-08
},
"Al2O3_coke_Ratio": {
"Value": 0.042282092286776846
},
"coal20_in": {
"Value": 0.5
},
"N2_coke_Ratio": {
"Value": 0.004445458100246247
},
"Vdaf_coke": {
"Value": 0.013892056563269523
},
"coal16_in": {
"Value": 5.602780301213676e-07
},
"coal10_in": {
"Value": 142.97118962379216
},
"BFG_Consum": {
"Value": 16.456410451576275
},
"coal2_in": {
"Value": 7.053576681297877e-08
},
"coal14_in": {
"Value": 2.9308557424879663e-08
},
"SiO2_coke_Ratio": {
"Value": 0.03710469323125315
},
"Coke_heatValue": {
"Value": 29169.49925193674
},
"Ad_coal": {
"Value": 0.10786248032341031
},
"coal17_in": {
"Value": 220.97087617030036
},
"Electric_Consum": {
"Value": 57.43203342116799
},
"H2_coke_Ratio": {
"Value": 0.004584378665878943
},
"Tar_out": {
"Value": 17.724511869001542
},
"coal6_in": {
"Value": 4.9357934174621755e-08
},
"coal15_in": {
"Value": 5.167176148347224e-08
},
"S_coke": {
"Value": 0.004
},
"W_coke": {
"Value": 0.049077528734272485
},
"Mt_coal": {
"Value": 0.08
},
"CaO_coke_Ratio": {
"Value": 0.004918529102747511
},
"Vdaf_coal": {
"Value": 0.2461421345020188
},
"coal5_in": {
"Value": 5.197732782413522e-08
},
"coal4_in": {
"Value": 5.167176148347224e-08
},
"coal12_in": {
"Value": 19.246859284358983
},
"coal1_in": {
"Value": 19.246859284359026
},
"Std_coal": {
"Value": 0.00815034825029823
},
"coal8_in": {
"Value": 1.0037925735979965e-07
},
"coal_in": {
"Value": 402.4357858158342
},
"C_coke": {
"Value": 0.8467404404403378
},
"coal7_in": {
"Value": 5.2296869530381416e-08
},
"Vd_coal": {
"Value": 0.2195926333625311
},
"COG_Consum": {
"Value": 13.476723869824669
},
"coal11_in": {
"Value": 5.46809011201378e-08
},
"Ben_out": {
"Value": 0.9750715307937867
}
}
}
]
}
需要用 语句
print(json.dumps(coking, indent=4))
json 写入
工序变量改变后,需要重新写入json中进行更新以传递给下一个工序使用
这个过程由于变量的名称是特殊的,可以选择直接锁定要更改的变量用if语句重新赋值,后写入json中
json的写入机制,看来应该是全部文件内容擦除后覆写,json不提供单个k-v的写入方法。
首先读取了整个json文件,然后在python环境中修改读取的object,写入的时候将修改过的object重新写入json中
值得一提的是,为了写入json文件美观,一般都要用到json.dumps()中的indent可选参数,一般设置indent=4
with open("../data.json", 'r', encoding='utf-8') as file: data = json.load(file) if data['Coking'][0]['Variable']['coal20_in']['Value'] != 0.5: data['Coking'][0]['Variable']['coal20_in']['Value'] = 0.5 print(data['Coking'][0]['Variable']['coal20_in']['Value']) after = data with open("../data.json", 'w') as f: data = json.dump(after, f, indent=4)