Search code examples
pythonjsonduplicatesrepeat

For loop repeat to get larger json data with no duplicate in Python


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.


Solution

  • 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)