前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【PY】根据 Excel 中的指示修改 JSON 数据

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

作者头像
sidiot
发布2023-08-31 14:06:14
1890
发布2023-08-31 14:06:14
举报
文章被收录于专栏:技术大杂烩技术大杂烩

前言

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

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

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

读入 Excel

因为要对 Excel 中的数据进行读取,首先想到的就是 pandas 的包,那接下来我们将用到这几个来自 pandas 中的函数以及属性:

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

1、首先,导入 pandas 的包:

代码语言:javascript
复制
import pandas as pd

2、读入相关 Excel 的数据,观察一下大致情况:

代码语言:javascript
复制
data = pd.read_excel("1.xlsx")
data

3、然后看一下列标题:

代码语言:javascript
复制
data.columns
代码语言:javascript
复制
Index(['context', 'role_id', 'resource'], dtype='object')

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

代码语言:javascript
复制
data.loc[0].values

按照友友的说法,需要根据 role_id__,将新 json 中的内容替换到旧 json 中去;

到这里,读入 Excel 就完工了,我们接下来根据 role_id 处理一下 JSON 中的数据就行了;

处理 JSON

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

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

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

1、获取文件的路径;

这里的话使用到了 os.getcwd(),即获取到当前文件的位置,

因此,能够写出两个文件夹里的文件的路径了:

代码语言:javascript
复制
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 文件加载进来;

代码语言:javascript
复制
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的位置有问题,看一下输出的结果,果真如此:

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

根据上述,我们只需要将新值覆盖到旧值上就行了:

代码语言:javascript
复制
old_content['对话过程'][data.loc[0].values[1]-1]['text'] = new_content['对话过程'][data.loc[0].values[1]-1]['text']

4、导出 JSON 文件;

这里用到的是 json.dumps()

代码语言:javascript
复制
with open(old_path, 'w') as f:
    json.dumps(old_content, f, indent=4, ensure_ascii=False)

TIPS

上述已经完成了单次处理 JSON 数据的情况,如何把所有都修改完就是留给友友的思考了;

在 for 循环时需要注意一个问题,那就是需不需要判断是否为同一个 JSON 文件

如果不进行判断的话,那就一次遍历就要完成读写两个操作,会比较浪费资源,以及相对来说速度较慢;

如果需要进行判断的话,有一种方法就是需要两个指针来进行辅助,伪代码如下:

代码语言:javascript
复制
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 数据,结合实际场景,具体问题具体分析,图文并茂,细致的讲解了操作过程以及其中需要注意的细节,希望大家有所收获!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 读入 Excel
  • 处理 JSON
  • 后记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档