本文正在参加「金石计划 . 分割6万现金大奖」

前言

继上一次友友问了怎么处理 Excel 中的数据之后,这次他又遇到了新问题,让咱们一起来看看;

【PY】根据 Excel 中的指示修改 JSON 数据

依据 Excel 中的指示,把旧的 json 中的内容改成新的 json 中的内容,那接下来且看博主娓娓道来;

如果对处理 Excel 中的数据感兴趣的小伙伴,可以看看之前的文章:【PY】pandas 处理 Excel 中错别字批改;

读入 Excel

因为要对 Excel 中的数据进行读取,首要想到的便是 pandas 的包,那接下来咱们将用到这几个来自 pandas 中的函数以及特点:

  • read_excel():读入 Excel 文件;
  • columns:查看数据表中的列名称;
  • values:查看数据表中的数值;

1、首要,导入 pandas 的包:

import pandas as pd

2、读入相关 Excel 的数据,调查一下大致状况:

data = pd.read_excel("1.xlsx")
data

【PY】根据 Excel 中的指示修改 JSON 数据

3、然后看一下列标题:

data.columns
Index(['context', 'role_id', 'resource'], dtype='object')

4、再看看单行的数据值:

data.loc[0].values

【PY】根据 Excel 中的指示修改 JSON 数据

依照友友的说法,需求依据 role_id,将新 json 中的内容替换到旧 json 中去;

到这儿,读入 Excel 就竣工了,咱们接下来依据 role_id 处理一下 JSON 中的数据就行了;

处理 JSON

要处理 JSON 的话,想必要将 JSON 的数据导入,在处理完成之后,还要从头导出,因而,这儿将用到 json 包,以及其中的两个函数:

  • dumps():将 Python 对象编码成 JSON 字符串;
  • loads():将已编码的 JSON 字符串解码为 Python 对象;

两个函数的实例可以参阅菜鸟教程,下面将直接使用;

1、获取文件的途径;

【PY】根据 Excel 中的指示修改 JSON 数据

这儿的话使用到了 os.getcwd(),即获取到当时文件的方位,

【PY】根据 Excel 中的指示修改 JSON 数据

因而,可以写出两个文件夹里的文件的途径了:

old_path = f"{os.getcwd()}/old/{data.loc[0].values[2]}"
new_path = f"{os.getcwd()}/new/{data.loc[0].values[2]}"

2、依次读入文件:

这儿就使用 json.loads() 将 JSON 文件加载进来;

with open(old_path, "r") as f:
    old_content = json.loads(f.read())
    print("old json:\n", old_content)
with open(new_path, "r") as f:
    new_content = json.loads(f.read())
    print("new json:\n", new_content)

在查取单行数据的时分,发现是 role_id 在12的方位有问题,看一下输出的结果,果真如此:

【PY】根据 Excel 中的指示修改 JSON 数据

3、批改旧 JSON 文件的内容;

依据上述,咱们只需求将新值掩盖到旧值上就行了:

old_content['对话进程'][data.loc[0].values[1]-1]['text'] = new_content['对话进程'][data.loc[0].values[1]-1]['text']

【PY】根据 Excel 中的指示修改 JSON 数据

4、导出 JSON 文件;

这儿用到的是 json.dumps()

with open(old_path, 'w') as f:
    json.dumps(old_content, f, indent=4, ensure_ascii=False)

TIPS

上述已经完成了单次处理 JSON 数据的状况,怎么把一切都批改完便是留给友友的思考了;

在 for 循环时需求留意一个问题,那便是需不需求判别是否为同一个 JSON 文件

  1. 如果不进行判别的话,那就一次遍历就要完成读写两个操作,会比较浪费资源,以及相对来说速度较慢;
  2. 如果需求进行判别的话,有一种方法便是需求两个指针来进行辅佐,伪代码如下:
    data = pd.read_excel("1.xlsx")
    start = data.loc[0].values[2]
    flag = False
    for index in data.index:
        cur = data.loc[index].values[2]
        if start != cur:
            with open(..., 'w') as f:
                json.dump(content, f, indent=4, ensure_ascii=False)
            flag = False
            start = cur
        if not flag:
            with open(..., 'r') as f:
                content = json.loads(f.read())
            flag = True
        ...
    

后记

以上便是 依据 Excel 中的指示批改 JSON 数据 的全部内容了,讲解了怎么经过 pandas 包来读入 Excel,以及怎么处理 JSON 数据,结合实际场景,具体问题具体分析,图文并茂,详尽的讲解了操作进程以及其中需求留意的细节,期望大家有所收获!

上篇精讲:【PY】pandas 处理 Excel 中错别字批改

我是,等待你的重视;

创造不易,请多多支撑;

系列专栏:PY