python 实现json

第一篇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
                }
            }
        }
    ]
}
需要用 语句
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)
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值