Как заполнить информацию из списка несколькими JSON объектами, используя python? - PullRequest
1 голос
/ 24 февраля 2020

По существу, есть список JSON объектов с именем subfolders, который должен содержать информацию из 2 файлов - 1 из списка с именем json_files, а другой хранится в списке с именем table_files.

Информация от json_files и table_files должна включаться по одному разу в каждом объекте JSON.

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

Мой код для вывода списка subfolders:

subfolders = [ f.path for f in os.scandir(rootdir) if f.is_dir() ]
subfolders = [sub.replace(rootdir + '\\', '') for sub in subfolders]

obj = { conf_name:{} for conf_name in subfolders }

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

Мой код для вывода информации json_data и table_data, которая должна храниться в подпапках:

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

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

combined = []
for j, t in zip(json_data, table_data):
    combined.append(j)
    combined.extend(t)

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

Желаемый вывод:

{
   "subfolder1": {
      "json_data": "{content from first json_data file in list}"
      "table_data": "content from first table_data file in list"
   },
   "subfolder2": {
      "json_data": "{content from second json_data file in list}"
      "table_data": "content from second json_data file in list"
   }
}

Таким образом Мне интересно, как я могу объединить все вместе, чтобы получить нужный мне формат. Спасибо за любую помощь, спасибо.

РЕДАКТИРОВАТЬ: для получения списка json_files и table_files:

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        if file.endswith(".json"):
            json_files.append(os.path.join(subdir, file))
        if file.endswith(".list"):
            table_files.append(os.path.join(subdir, file))

1 Ответ

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

Вы можете попробовать следующее:

summary = {}
for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        if file.endswith(".json"):
            json_files.append(os.path.join(subdir, file))
        if file.endswith(".list"):
            table_files.append(os.path.join(subdir, file))

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

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

    summary[subdir] = {
        'json_data': json_data,
        'table_data': table_data
    }
with open('summary.json', 'w') as f:
    json.dump(summary, f, indent=2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...