Открыть и сохранить список файлов JSON в другом списке

#python #json #for-loop

#python #json #for-цикл

Вопрос:

Я пытаюсь сохранить определенный файл JSON, который находится в каждой вложенной папке в корневой папке.

Мне удалось это сделать, и теперь у меня есть этот список:

 list_1
  

который дает:

 ['C:\Users\user\Downloads\problem00001\ground-truth.json',
 'C:\Users\user\Downloads\problem00002\ground-truth.json',
 'C:\Users\user\Downloads\problem00003\ground-truth.json']
  

Теперь я пытаюсь открыть каждый из этих JSON файлов внутри списка, но сохраняется только последний.
Цель состоит в том, чтобы сохранить их все вместе, а не только последний.

Вот что я попробовал:

 for k in list_1:
    with open(k, 'r') as f:
        gt = {}
        gt2=[]
        for i in json.load(f)['ground_truth']:
            #print(i) <--- This here prints exactly what I need
            gt[i['unknown-text']] = i['true-author']
        gt2.append(gt)    
  

Я предполагаю, что на каждой итерации он заменяется, но не уверен.

Ответ №1:

Вы повторно инициализируете список gt2 в каждом цикле for. Следовательно, это должно быть вне цикла.

 gt2=[]
for k in list_1:
    with open(k, 'r') as f:
        gt = {}
        for i in json.load(f)['ground_truth']:
            #print(i) <--- This here prints exactly what I need
            gt[i['unknown-text']] = i['true-author']
        gt2.append(gt)   
  

Комментарии:

1. Вы думаете, что gt = {} не является необходимым?

2. Я не знаю варианта использования, но, похоже, в этом нет необходимости. Вы можете напрямую использовать gt2.append(i[‘true-author’]) сразу после строки print (i), но я думаю, вам нужна некоторая уникальность.

Ответ №2:

Вы перезаписываете локальную gt2=[] переменную каждый раз после чтения файла. Вы должны определить это перед повторением цикла list_1 как:

 gt2 =[]
for k in list_1:
    with open(k, 'r') as f:
        gt = {}
        for i in json.load(f)['ground_truth']:
            #print(i) <--- This here prints exactly what I need
            gt[i['unknown-text']] = i['true-author']
        gt2.append(gt)