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

如何用Python将JSON中Occupancies的Code值改为CSV读取的变量值

完整实现JSON字段替换的Python方案

没问题,我来帮你补全这个需求的实现代码,确保能把CSV文件里的a值准确替换到JSON中Occupancies数组元素的Code字段里。下面是完整的可运行代码,我还会拆解关键步骤帮你理解:

完整代码实现

import json
import os
import csv

# 切换到JSON文件所在的目录,确保文件路径正确
os.chdir('C:\\path\\to\\folder')

# 从CSV文件读取变量a的值(假设CSV有表头,"a"是目标列名)
a_value = None
with open('Export_C.csv', mode='r', newline='', encoding='utf-8') as csv_file:
    # 使用DictReader可以直接通过列名取值,比按索引更直观
    csv_reader = csv.DictReader(csv_file)
    # 这里取CSV第一行的a值,如果需要处理多行可以去掉break循环遍历
    for row in csv_reader:
        a_value = row['a']
        break

# 校验是否成功获取到a的值,避免后续操作出错
if not a_value:
    raise ValueError("CSV文件中未找到有效的'a'列数据,请检查列名或文件内容")

# 读取目标JSON文件并解析为Python字典
json_filename = 'your_target_json.json'  # 替换成你的JSON文件名
with open(json_filename, mode='r', encoding='utf-8') as json_file:
    json_data = json.load(json_file)

# 遍历Occupancies数组,替换每个元素的Code字段
# 如果只需要替换特定ID的元素,可以在这里加判断条件
for occupancy in json_data['Valuation']['Occupancies']:
    # 把CSV读取的字符串转成整数,匹配原JSON中Code的整数类型
    occupancy['Code'] = int(a_value)

# 将修改后的数据写回JSON文件,保留格式化让文件更易读
with open(json_filename, mode='w', encoding='utf-8', indent=4) as json_file:
    json.dump(json_data, json_file, ensure_ascii=False, indent=4)

print("JSON文件已成功更新!")

关键细节说明

  • CSV读取优化:用csv.DictReader替代基础的csv.reader,这样可以直接通过列名(比如row['a'])获取值,不用手动记列的索引,适配CSV列顺序变化的情况。如果你的CSV没有表头,改用csv.reader后可以通过索引取值,比如row[0](假设a在第一列)。
  • 类型一致性:原JSON中Code是整数类型,所以必须把从CSV读取的字符串转成int,避免写入JSON后类型错乱。
  • 安全文件操作:全程用with语句管理文件,它会自动帮你关闭文件,避免忘记关闭导致的资源泄漏问题。
  • 异常预防:加了a_value的校验,如果CSV里找不到目标列或数据,会直接抛出错误提示,不会让代码默默失败。
  • JSON格式化:写回文件时用indent=4让JSON保持缩进格式,ensure_ascii=False支持中文等非ASCII字符正常显示。

扩展场景:按ID匹配替换(如果CSV有多行数据)

如果你的CSV里有多行数据,且每行对应Occupancies数组里的一个元素(比如通过ID匹配),可以用下面的修改版代码:

import json
import os
import csv

os.chdir('C:\\path\\to\\folder')

# 先把CSV所有数据存成以ID为键的字典
csv_id_map = {}
with open('Export_C.csv', mode='r', newline='', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        # 假设CSV里有"ID"列对应JSON的ID字段
        item_id = int(row['ID'])
        csv_id_map[item_id] = int(row['a'])

# 读取并修改JSON
json_filename = 'your_target_json.json'
with open(json_filename, mode='r', encoding='utf-8') as json_file:
    json_data = json.load(json_file)

# 按ID匹配替换Code字段
for occupancy in json_data['Valuation']['Occupancies']:
    occ_id = occupancy['ID']
    if occ_id in csv_id_map:
        occupancy['Code'] = csv_id_map[occ_id]
    else:
        print(f"未找到ID为{occ_id}的CSV数据,跳过该元素替换")

# 写回JSON
with open(json_filename, mode='w', encoding='utf-8', indent=4) as json_file:
    json.dump(json_data, json_file, ensure_ascii=False, indent=4)

print("JSON文件已完成匹配更新!")

内容的提问来源于stack exchange,提问作者Ajinkya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:52:48