Python匹配Excel字段后替换对应JSON块Name值的实现问题
修正后实现方案
原代码核心问题
- 读取Excel时遗漏必填的
Article字段,无法完成「New_Name和Article是否相等」的前置校验 - 错误读取JSON中不存在的
New_Name字段,原始JSON的匹配字段为Name - 匹配逻辑不符合需求,嵌套循环写法效率低下
- 最终写入文件时错误导出Excel数据而非修改后的JSON数据,且使用追加模式会导致文件内容重复
实现逻辑
- 读取Excel的
New_Name、Article、Old_name三个字段,清洗后过滤出New_Name == Article的行,生成{Article值: Old_name值}的映射字典,避免嵌套循环提升查询效率 - 读取原始JSON数组,遍历每个数据块,拿
Name字段值去映射字典中查找,存在匹配就替换Name为对应的Old_name - 把修改后的JSON数组写入结果文件
完整可运行代码
import json import pandas as pd def get_excel_mapping(): # 读取需要的三个字段 df = pd.read_excel( r"C:\Users\user1\PycharmProjects\project1\total.xls", usecols=["New_Name", "Article", "Old_name"] # 如果你的Old_name列名末尾真有空格就改成"Old_name " ) # 空值填充+字段清洗 df = df.fillna("") for col in ["New_Name", "Article", "Old_name"]: df[col] = df[col].apply(lambda x: x.strip() if isinstance(x, str) else x) # 过滤New_Name和Article相等的行,生成映射字典 valid_df = df[df["New_Name"] == df["Article"]] mapping = dict(zip(valid_df["Article"], valid_df["Old_name"])) return mapping def update_json(): # 读取原始JSON with open("_final_result_v2.json", encoding="utf-8") as f: json_items = json.load(f) # 获取Excel映射表 name_mapping = get_excel_mapping() # 遍历JSON替换字段 for item in json_items: original_name = item.get("Name", "") if original_name in name_mapping: item["Name"] = name_mapping[original_name] # 写入修改后的JSON with open("result111.json", "w", encoding="utf-8") as f: json.dump(json_items, f, indent=4, ensure_ascii=False) print("修改完成,结果已写入result111.json") if __name__ == '__main__': update_json()
内容的提问来源于stack exchange,提问作者AlexMsk
相关产品推荐
相关产品推荐

