如何用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
相关产品推荐
相关产品推荐

