You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python匹配Excel字段后替换对应JSON块Name值的实现问题

修正后实现方案

原代码核心问题

  • 读取Excel时遗漏必填的Article字段,无法完成「New_Name和Article是否相等」的前置校验
  • 错误读取JSON中不存在的New_Name字段,原始JSON的匹配字段为Name
  • 匹配逻辑不符合需求,嵌套循环写法效率低下
  • 最终写入文件时错误导出Excel数据而非修改后的JSON数据,且使用追加模式会导致文件内容重复

实现逻辑

  1. 读取Excel的New_Name、Article、Old_name三个字段,清洗后过滤出New_Name == Article的行,生成{Article值: Old_name值}的映射字典,避免嵌套循环提升查询效率
  2. 读取原始JSON数组,遍历每个数据块,拿Name字段值去映射字典中查找,存在匹配就替换Name为对应的Old_name
  3. 把修改后的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:21:00