Чтение нескольких вложенных .файлы json из определенной папки в Excel с использованием python / pandas

#python #json #excel #pandas

#python #json #excel #pandas

Вопрос:

Я хочу прочитать несколько вложенных файлов json, расположенных в папке, в файл Excel. Поскольку большая часть .файлы json отличаются друг от друга (различные уровни вложенности в каждом файле), это также означает, что некоторые столбцы (значения) в файле Excel, очевидно, должны быть NaN. У меня нет проблем с чтением определенного файла с этим кодом, но потребуется некоторое время, чтобы прочитать 10 000 один за другим.

 import json 
import pandas as pd 
from pandas.io.json import json_normalize 

with open('file1.json','r') as f: #Here I want help, since i need to read 10 000 json files.
    data = json.loads(f.read())
multiple_level_data = pd.json_normalize(data, record_path =['data'], errors='ignore', meta =['total-count'], meta_prefix='config_params_', record_prefix='dbscan_')
multiple_level_data.to_excel('file1converted.xlsx', index=False)
  

Однако, как я могу изменить свой код python, чтобы читать все файлы json в папке, а не только file1.json?

Ответ №1:

Вы можете попробовать os.listdir() :

 import os
import json 
import pandas as pd 
from pandas.io.json import json_normalize 

for js in [x for x in os.listdir() if x.endswith('.json')]:
  with open(js,'r') as f: 
    data = json.loads(f.read())
    multiple_level_data = pd.json_normalize(data, record_path =['data'], errors='ignore', meta =['total-count'], meta_prefix='config_params_', record_prefix='dbscan_')
    multiple_level_data.to_excel(js 'converted.xlsx', index=False)
  

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

1. Спасибо Wasif, это, казалось, работало отлично, однако он создал один файл Excel для каждого из файлов json. Возможно ли вместо создания 10 000 файлов Excel для каждого. json и вместо этого объединить этот цикл for в один файл Excel с 10 000 строками?

Ответ №2:

Приведенное выше решение от Wasif работало отлично, однако я добавил это, чтобы поместить его в ОДИН файл Excel.

 df = pd.DataFrame()
for file in files:
     if file.endswith('.xlsx'):
         df = df.append(pd.read_excel(file, engine='openpyxl'), ignore_index=True) 
df.to_excel("AllJsonFilesInOneExcel.xlsx")
  

Спасибо.