python实现嵌套字典内容保存到json文件,读取,更新,重写

1.字典结构如下:{cell1: { level1:[rsrp1,att1], level2:[rsrp2,att2] }, cell2: {level3:[rsrp3,att3], }
2.需求:实现嵌套字典内容保存到json文件,读取,更新,重写
3.代码如下:

import os
import json


class Update_Get_Rewrite_data():
    """
    desc:实现嵌套字典内容保存到json文件,读取,更新,重写
    """

    def get_data(self):
        """
        desc:读取json文件里的字典内容
        字典结构: {cell1:
            { level1:[rsrp1,att1],
            level2:[rsrp2,att2] },
          cell2:
            {level3:[rsrp3,att3],
            }
        :return:
        """
        path = os.path.join(os.getcwd() + "\\test.json")  # 获取当前工作目录,拼接json路径
        try:
            # 1.如果文件不存在,新建一个
            if not os.path.exists(path):
                with open(path, "w", )as f:
                    f.write("")
                    print("文件不存在,新建test.json")
            # 2.文件存在,读取文件内容
            else:
                with open(path, "r")as f:
                    for jsonstr in f.readlines():  # 按行读取json文件,每一行为一个字符串
                        data = json.loads(jsonstr)
                        print(data)
                        print("get success")
        except Exception as e:
            print("打开json文件失败==>", e)

    def update_data(self, cell, level, rsrp, att):
        """
        desc:更新嵌套字典的内容,可在原有的基础上修改
        字典结构: {cell1:
                    { level1:[rsrp1,att1],
                    level2:[rsrp2,att2] },
                  cell2:
                    {level3:[rsrp3,att3],
                    }
        :return:
        """
        # 1.更新之前,先加载json文件,拿到字典内容
        path = os.path.join(os.getcwd() + "\\test.json")
        print(path)
        try:
            # 路径无json文件,创建一个新的并写入
            if not os.path.exists(path):
                dict = {}
                dict[cell] = {}
                dict[cell][level] = [rsrp, att]
                item = json.dumps(dict)
                with open(path, "w", )as f:
                    f.write(item)
                    print("write success")
            # 路径有json文件,读取出来
            else:
                with open(path, "r")as f:
                    for jsonstr in f.readlines():
                        gnodeb_dict = json.loads(jsonstr)
                        if cell not in gnodeb_dict:
                            gnodeb_dict[cell] = {level: [rsrp, att]}
                        # 如果键值对存在,新增
                        else:
                            gnodeb_dict[cell][level] = [rsrp, att]
                        # 写入json文件
                        item = json.dumps(gnodeb_dict)
                        with open(path, "w")as f:
                            f.write(item)
                            print("write success")
        except Exception as e:
            print("write error==>", e)

    def rewrite_data(self, cell, level, rsrp, att):
        """
        重写嵌套字典的内容
        字典结构: {cell1:
                    { level1:[rsrp1,att1],
                    level2:[rsrp2,att2] },
                  cell2:
                    {level3:[rsrp3,att3],
                    }
        :return:
        """
        path = os.path.join(os.getcwd() + "\\test.json")
        # 拼接参数为嵌套字典
        dict = {}
        dict[cell] = {}
        dict[cell][level] = [rsrp, att]
        try:
            # 1.如果文件不存在,新建一个json文件并写入
            if not os.path.exists(path):
                item = json.dumps(dict)
                with open(path, "w", )as f:
                    f.write(item)
                    print("write success")
            # 2.文件存在,直接覆盖原内容
            else:
                item = json.dumps(dict)
                with open(path, "w", )as f:
                    f.write(item)
                    print("rewrite success")

        except Exception as e:
            print("rewrite error==>", e)


data = Update_Get_Rewrite_data()

# 要传入的参数示例
cell = "gNodeB_cell1"
level = "level4"
rsrp = 35
att = 999

# data.get_data()
# data.update_data(cell,level,rsrp,att)
# data.rewrite_data(cell,level,rsrp,att)

4.目录结构
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值