#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")
Спасибо.