Python循环生成JSON时ProcessGuid叠加问题求助
问题原因分析
你的代码出现叠加追加的核心问题是可变对象的引用传递:
result_int = papers并没有创建papers的副本,只是让result_int指向了papers所在的内存地址,二者是同一个列表对象。- 后续循环中
result = result_int同样是引用赋值,每次修改result[i]['Event']['EventData']['ProcessGuid']时,都是直接修改原始papers列表里的字典内容。下一次循环会基于上一次修改后的结果继续追加数字,最终出现叠加的情况。
解决方案
每次循环时,对原始的papers数据进行深拷贝,确保每次迭代操作的都是独立的副本,不会污染原始数据。修改后的代码如下:
import json import copy # 导入copy模块用于深拷贝 # 读取原始数据 with open("D:/Test/test.json", 'r', encoding='utf-8') as file: papers = [] for line in file.readlines(): dic = json.loads(line) papers.append(dic) # 生成1-10的字符串数字,注意range(1,11)才会包含10 string_name = list(map(str, range(1, 11))) for element in string_name: # 深拷贝原始papers,生成独立的副本 result = copy.deepcopy(papers) for item in result: # 基于原始的ProcessGuid值追加数字 item['Event']['EventData']['ProcessGuid'] = f"{item['Event']['EventData']['ProcessGuid']}{element}" # 写入文件 with open(f"D:/Test/process_{element}.json", 'w', encoding='utf8') as json_file: json.dump(result, json_file, ensure_ascii=False)
额外说明
- 原代码中
range(1,10)只会生成1-9的数字,如果你需要生成10份文件(到10),要改成range(1,11)。 - 使用
copy.deepcopy()是因为列表里的元素是字典(可变对象),浅拷贝copy.copy()只会拷贝列表外层,内部的字典还是引用,无法解决问题。 - 改用
with语句管理文件,能自动关闭文件,避免资源泄漏。
内容的提问来源于stack exchange,提问作者連振宇
相关产品推荐
相关产品推荐

