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

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,提问作者連振宇

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:10:26