Как загрузить данные из нескольких JSON файлов из списка, используя python? - PullRequest
0 голосов
/ 22 февраля 2020

По сути, у меня есть список JSON файлов, для которых мне нужна информация, извлеченная из которой сохраняется в переменной с именем json_files.

Информация из этих файлов должна быть затем агрегирована и перенесена в новый файл с именем summary.json.

В настоящее время я могу сделать это с помощью следующих строк кода, но только для по одному файлу за один раз, указав индекс:

with open(json_files[1]) as f:
    data = json.load(f)

with open('summary.json', 'w') as f:
    json.dump(data, f, indent=2)

Однако, если я попытаюсь использовать for для l oop, как показано ниже, я получаю TypeError: индексы списка должны быть целыми или слайсерами, а не str

for i in json_files:
    with open(json_files[i]) as f:
        data = json.load(f)

with open('summary.json', 'w') as f:
    json.dump(data, f, indent=2)

Таким образом, мне было интересно, как лучше всего загрузить информацию из нескольких файлов json, а затем объединить ее в 1 новый большой файл json?

Спасибо за авансовый

1 Ответ

1 голос
/ 22 февраля 2020
for i in json_files:
    with open(json_files[i]) as f:
        data = json.load(f)

Должно быть

for i in json_files:
    with open(i) as f:
        data = json.load(f)

Что происходит: json_files - это список с именами, которые я предполагаю, поэтому что-то вроде json_files = ['file1.json', 'file2.json']

Итак, ваш метод open был получение параметров типа json_files['file1.json'] в for для l oop, что не имеет смысла, поскольку json_files - это список, а не словарь.

i в for для l oop содержит фактический значение в списке, а не индексы .

Редактировать:

Переменная data в приведенном выше коде перезаписывается на каждой итерации Л oop! Вам, вероятно, нужно сделать что-то подобное, чтобы исправить это:

combined = []
    for i in json_files:
        with open(i) as f:
            combined.append(json.load(f))

А затем использовать функцию dump, чтобы записать этот список в другой файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...