简体   繁体   English

如何将多个json文件转换为cvs文件

[英]How to convert multiple json files to cvs files

Hello I have multiple json files in a path and I want to convert all of them to csv files separately.您好,我在一个路径中有多个 json 文件,我想将它们分别转换为 csv 文件。 Here is what I have tried so far which just convert one json file to a csv file.这是我到目前为止所尝试的,它只是将一个 json 文件转换为 csv 文件。

with open('/Users/hh/MyDataSet/traceJSON-663-661-A0-25449-7.json') as f:
  for line in f:
     data.append(json.loads(line))

csv_file=open('/Users/hh/MyDataSet/GTruth/traceJSON-663-661-A0-25449-7.csv','w')

write=csv.writer(csv_file)
# write.writerow(["row number","type","rcvTime","pos_x","pos_y","pos_z","spd_x","spd_y","spd_z","acl_x","acl_y","acl_z"
#                 ,"hed_x","hed_y","hed_z"])
write.writerow(["row number","type","rcvTime","sender","pos_x","pos_y","pos_z","spd_x","spd_y","spd_z","acl_x","acl_y","acl_z"
                ,"hed_x","hed_y","hed_z"])
for elem in range(len(data)):    
   if data[elem]['type']==2:
     write.writerow([elem,data[elem]['type'],round(data[elem]['rcvTime'],2),'663',round(data[elem]['pos'][0],2),round(data[elem]['pos'][1],2)
                   ,round(data[elem]['pos'][2],2),round(data[elem]['spd'][0],2),round(data[elem]['spd'][1],2),round(data[elem]['spd'][2],2),
                   round(data[elem]['acl'][0],2),round(data[elem]['acl'][1],2),round(data[elem]['acl'][2],2),round(data[elem]['hed'][0],2),
                  round(data[elem]['hed'][1],2),round(data[elem]['hed'][2],2)])
   elif data[elem]['type']==3:
     write.writerow([elem,data[elem]['type'],round(data[elem]['rcvTime'],2),round(data[elem]['sender'],2),round(data[elem]['pos'][0],2),round(data[elem]['pos'][1],2)
                   ,round(data[elem]['pos'][2],2),round(data[elem]['spd'][0],2),round(data[elem]['spd'][1],2),round(data[elem]['spd'][2],2),
                   round(data[elem]['acl'][0],2),round(data[elem]['acl'][1],2),round(data[elem]['acl'][2],2),round(data[elem]['hed'][0],2),
                  round(data[elem]['hed'][1],2),round(data[elem]['hed'][2],2)])
# json_file.close()
print('done!')
csv_file.close()

I appreciate if anyone can help me how can I do it.如果有人可以帮助我,我将不胜感激。 Also in each json file name "traceJSON-663-661-A0-25449-7", the first number like in the above code (663) should be written in csv file like the following code,if the type is 2:同样在每个 json 文件名“traceJSON-663-661-A0-25449-7”中,如果类型为 2,则上述代码中的第一个数字 (663) 应写入 csv 文件中,如下代码所示:

write.writerow([elem,data[elem]['type'],round(data[elem]['rcvTime'],2),'663',....

My json file names are like traceJSON-51-49-A16-25217-7, traceJSON-57-55-A0-25223-7, ....我的 json 文件名类似于 traceJSON-51-49-A16-25217-7, traceJSON-57-55-A0-25223-7, ....

I suggest using pandas for this:我建议为此使用pandas

from glob import glob
import pandas as pd
import os

filepaths = glob('/Users/hh/MyDataSet/*.json') # get list of json files in folder

for f in filepaths:
    filename = os.path.basename(f).rsplit('.', 1)[0] # extract filename without extension
    nr = int(filename.split('-')[1]) # extract the number from the filename - assuming that all filenames are formatted similarly, use regex otherwise
    df = pd.read_json(f) # read the json file as a pandas dataframe, assuming the json file isn't nested
    df['type'] = df['type'].replace(2, nr) # replace 2 in 'type' column with the number in the filename
    df.to_csv(f'{filename}.csv') # save as csv

If you want to round columns, you can also do this with pandas如果你想圆列,你也可以用pandas做到这一点

import csv import glob import json import os.path for src_path in glob.glob('/Users/hh/MyDataSet/*.json'): src_name = os.path.splitext(os.path.basename(src_path))[0] data = [] with open(src_path) as f: for line in f: data.append(json.loads(line)) dest_path = '/Users/hh/MyDataSet/GTruth/' + src_name + '.csv' csv_file=open(dest_path,'w') write=csv.writer(csv_file) write.writerow(["row number","type","rcvTime","sender","pos_x","pos_y","pos_z","spd_x","spd_y","spd_z","acl_x","acl_y","acl_z" ,"hed_x","hed_y","hed_z"]) for elem in range(len(data)): if data[elem]['type']==2: sender = src_name.split('-')[1] write.writerow([elem,data[elem]['type'],round(data[elem]['rcvTime'],2),sender,round(data[elem]['pos'][0],2),round(data[elem]['pos'][1],2) ,round(data[elem]['pos'][2],2),round(data[elem]['spd'][0],2),round(data[elem]['spd'][1],2),round(data[elem]['spd'][2],2), round(data[elem]['acl'][0],2),round(data[elem]['acl'][1],2),round(data[elem]['acl'][2],2),round(data[elem]['hed'][0],2), round(data[elem]['hed'][1],2),round(data[elem]['hed'][2],2)]) elif data[elem]['type']==3: write.writerow([elem,data[elem]['type'],round(data[elem]['rcvTime'],2),round(data[elem]['sender'],2),round(data[elem]['pos'][0],2),round(data[elem]['pos'][1],2) ,round(data[elem]['pos'][2],2),round(data[elem]['spd'][0],2),round(data[elem]['spd'][1],2),round(data[elem]['spd'][2],2), round(data[elem]['acl'][0],2),round(data[elem]['acl'][1],2),round(data[elem]['acl'][2],2),round(data[elem]['hed'][0],2), round(data[elem]['hed'][1],2),round(data[elem]['hed'][2],2)]) csv_file.close() print('done!')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM