处理json大量数据使得我们非常头疼,因此我写了一段程序帮助实现读取指定数据,并遍历文件夹下所有的json文件。
import numpy as np
import jsonpath
import json
import os, glob
import pandas as pd
from natsort import ns,natsorted #这个很重要,有利于按照run_0~403.csv的顺序读取csv文件
path_in = r'E:\PycharmProjects\ANN\Datas\Runs\perturbed' # 文件夹位置
file_names = os.listdir(path_in) # 文件夹位置
file_paths2 = glob.glob(os.path.join(path_in, "*.json"))
file_paths2 = natsorted(file_paths2, alg=ns.PATH)#自定义顺序排列
data_list1 = []
for json_folder in file_paths2: #遍历文件夹中的json文件
obj = json.load(open(json_folder, encoding='utf-8')) # 注意,这里是文件的形式,不能直接放一个文件名的字符串
ddate = jsonpath.jsonpath(obj, '$..new_val')# 文件对象中的指定Key值,
data = np.array(ddate)
data_list1.append(data) #读取所有指定键值保存在数组中
#print(ddate)
data_list2 = np.array(data_list1)
y = data_list2.reshape(404, 4) #将数值格式变成矩阵
data = pd.DataFrame(y)
writer = pd.ExcelWriter('E:\PycharmProjects\ANN\Datas\SCOPE.xlsx') # 写入Excel文件
data.to_excel(writer, 'Sheet1', float_format='%.5f', index=['N_ch_set', 'D_ch', 'mdot_hot_in_set', 'dmdot_hot_in_set'], header=None) # ‘sheet1’是写入excel的sheet名
writer.save()
"""
for fn in filelist:
exp_name = []
file_name = os.path.join(foldername, fn)
mdot = 0
dhyd = 0
with open(file_name, 'r') as json_reader:
perturb_params = json.load(json_reader)
for param in perturb_params:
name = param['name']
val = param['new_val']
if name == "mdot_hot_in_set":
mdot = float(val)
else:
dhyd = float(val)
exp_name.append(f'{name}={val:.2g}')
# file_name = file_name.replace('.json', '.csv')
df = pd.DataFrame(perturb_params)
df.to_excel(os.path.join(root, 'rumor.xlsx'),encoding='utf8')
import numpy as np
import openpyxl as op
from natsort import ns,natsorted #这个很重要,有利于按照run_0~403的顺序读取json文件
import pandas as pd
import glob
import os
path_in = r'C:\PycharmProjects\ANN\Datas\Runs\perturbed' # 文件夹位置
file_names = os.listdir(path_in) # 文件夹位置
file_paths = glob.glob(os.path.join(path_in, "*.json")) # 文件夹列表
file_paths = natsorted(file_paths, alg=ns.PATH)
# print(file_paths)
data_list = []
for i in list(range(0, 404)):
df = pd.read_json(file_paths[i])
data = df.to_excel
#print(data)
data_list.append(data)"""
#print(data_list)