将数据集中csv文件转换为json文件

复现别人的实验,往往死在第一步,数据处理。同样一个数据集,你用json文件做输出,我调csv文件。大家的分法还不一样,那我怎么比较实验性能。没有困难,创造困难也要上,不然觉得自己没有成就感。
以下代码解决了,如何将给定的csv文件(包含两列,第一列是图片名称,第二列是对应的标签,如下图所示。)
在这里插入图片描述将这样的csv文件,转化为,包含三列:第一列是所有的类名称,第二列是图片的绝对路径,第三列是图片对应的标签,如下图所示:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述这样的json文件。
主要完成的操作就是,csv文件的读取和json文件的写入,代码如下所示:

`# -*- coding:utf-8 -*-  
import numpy as np
from os import listdir
from os.path import isfile, isdir, join
import os
import json
import random
import re
data_path = '/data2/quxue/cub/images/'
savedir = '/data2/quxue/cub/'
dataset_list = ['train','val','test']

label_names = [f for f in listdir(data_path) if isdir(join(data_path, f))]
label_names.sort()

for dataset in dataset_list:
    image_names = []
    image_labels = []
    with open(savedir+dataset+'.csv','r',encoding='UTF-8') as f:
        lines=f.readlines()
        for i in range(len(lines)):
            if i!=0:
                l=lines[i].strip("\n").split(",")
                image_names.append(data_path+l[1]+'/'+l[0])
                image_labels.append(l[1][:3])
        fo = open(savedir + dataset + '.json', 'w')
        fo.write('{"label_names": [')
        fo.writelines(['"%s",' % item  for item in label_names])
        fo.writelines(label_names)
        fo.seek(0, os.SEEK_END) 
        fo.seek(fo.tell()-1, os.SEEK_SET)
        fo.write('],')

        fo.write('"image_names": [')
        fo.writelines(['"%s",' % item  for item in image_names])
        fo.seek(0, os.SEEK_END) 
        fo.seek(fo.tell()-1, os.SEEK_SET)
        fo.write('],')

        fo.write('"image_labels": [')
        fo.writelines(['%d,' % int(item)  for item in image_labels])
        fo.seek(0, os.SEEK_END) 
        fo.seek(fo.tell()-1, os.SEEK_SET)
        fo.write(']}')

            #print("%s -OK" %dataset)

如有错误,请指正。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值