0

I tried to repeat 10times of json file which add 1~10 at element called "ProcessGuid" in each iteration via the following code

import json
file = open("D:/Test/test.json",'r',encoding='utf-8')
papers = []
for line in file.readlines():
    dic = json.loads(line)
    papers.append(dic)
    
result_int = papers
string_name = list(map(str, range(1,10)))
    
for element in string_name:
    result = []
    result = result_int
    processlist = []
    for i in range(len(result)):
        (result[i])['Event']['EventData']['ProcessGuid'] = str((result[i])['Event']['EventData']['ProcessGuid'])+element
    
    with open("D:/Test/process_"+str(element)+".json", 'w', encoding ='utf8') as json_file:
        json.dump(result, json_file, ensure_ascii = False) 

I though the result of data in each repeat would be like (suppose the origin data element of ProcessGuid is Hello)

1st repeat : ProcessGuid = Hello1
2nd repeat : ProcessGuid = Hello2
3rd repeat : ProcessGuid = Hello3
...
10th repeat : ProcessGuid = Hello10

But the result is the following

1st repeat : ProcessGuid = Hello1
2nd repeat : ProcessGuid = Hello12
3rd repeat : ProcessGuid = Hello123
...
10th repeat : ProcessGuid = Hello12345678910

Where do I get wrong? Thanks.

連振宇
  • 31
  • 4

2 Answers2

0

You keep overwriting result_int over and over again.

How do I clone a list so that it doesn't change unexpectedly after assignment?

Change:

result = list(result_int)
Adelina
  • 10,915
  • 1
  • 38
  • 46
0

For each element, the code appends to the same values. If you only want to append each element once to the original values, you could save the original values first:

base_values = [str(paper['Event']['EventData']['ProcessGuid']) for paper in papers]

for element in string_name:
    for i, paper in enumerate(papers):
        paper['Event']['EventData']['ProcessGuid'] = base_values[i] + element
    
    with open("D:/Test/process_" + str(element) + ".json", 'w', encoding ='utf8') as json_file:
        json.dump(papers, json_file, ensure_ascii = False) 
janos
  • 120,954
  • 29
  • 226
  • 236