本文正在参加「金石计划 . 分割6万现金大奖」
前言
继上一次友友问了怎么处理 Excel 中的数据之后,这次他又遇到了新问题,让咱们一起来看看;
依据 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
3、然后看一下列标题:
data.columns
Index(['context', 'role_id', 'resource'], dtype='object')
4、再看看单行的数据值:
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()
,即获取到当时文件的方位,
因而,可以写出两个文件夹里的文件的途径了:
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的方位有问题,看一下输出的结果,果真如此:
3、批改旧 JSON 文件的内容;
依据上述,咱们只需求将新值掩盖到旧值上就行了:
old_content['对话进程'][data.loc[0].values[1]-1]['text'] = new_content['对话进程'][data.loc[0].values[1]-1]['text']
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 文件:
- 如果不进行判别的话,那就一次遍历就要完成读写两个操作,会比较浪费资源,以及相对来说速度较慢;
- 如果需求进行判别的话,有一种方法便是需求两个指针来进行辅佐,伪代码如下:
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