Как объединить данные из файла. json и .list поочередно, используя python для выгрузки в новый файл JSON? - PullRequest
0 голосов
/ 23 февраля 2020

По сути, моя задача - извлечь информацию сначала из файла JSON, а затем из файла .list. Затем эта информация в чередующейся последовательности будет выгружена в новый файл JSON с именем summary.json.

. На данный момент мой подход заключается в извлечении всех данных json в один список, а затем в данные списка. в другой список. Оттуда я добавляю эту информацию все по 1 индексу за раз в новый комбинированный список, который должен быть выгружен.

# append json_data to list1
json_data = []
for i in json_files:
    with open(i) as f:
        json_data.append(json.load(f))

# append table_data to list2
table_data = []
for i in table_files:
    with open(i) as f:
        for line in f:
            table_data.append(line)

#format data to remove \n characters
table_data = [sub.replace('\n', '') for sub in table_data]

#combine list info
combined = []
while True:
    try:
        combined.append(json_data.pop(0))
        combined.append(table_data.pop(0))
    except IndexError:
        break

# dump list info to new json file
with open('summary.json', 'w') as f:
    json.dump(combined, f, indent=2)

Вот вывод с моим текущим кодом:

[
  {
    "json_object1_item1": "value1",
    "json_object1_item2": "value2",
    "json_object1_item3": "value3"
  },
  tablelist1_item1,
  {
    "json_object2_item1": "value1",
    "json_object2_item2": "value2",
    "json_object2_item3": "value3"
  }
 tablelist1_item2
]

Желаемый вывод выглядит примерно так:

[
  {
    "json_object1_item1": "value1",
    "json_object1_item2": "value2",
    "json_object1_item3": "value3"
  },
  tablelist1_item1,
  tablelist1_item2,
  tablelist1_item3,
  {
    "json_object2_item1": "value1",
    "json_object2_item2": "value2",
    "json_object2_item3": "value3"
  }
 tablelist2_item1,
 tablelist2_item2,
 tablelist2_item3
]

Как я могу исправить свой код, чтобы получить то, что мне нужно? Есть ли лучший подход к достижению моего результата? Спасибо

1 Ответ

0 голосов
/ 23 февраля 2020

Причина, по которой вы получаете только одно значение из table_data, заключается в том, что вы сгладили его, например, [1,2,3,4,5,6] вместо [[1,2],[3,4],[5,6]], например:

table_data = []
for i in table_files:
    with open(i) as f:
        table_data.append([line.rstrip('\n') for line in f])

И затем вам нужно сгладить это в вашем комбайне. Использование extend выравнивает table_data. zip() - это более простой способ объединения двух списков, который останавливается при исчерпании одного или другого списка:

combined = []
for j, t in zip(json_data, table_data):
    combined.append(j)
    combined.extend(t)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...