批量处理:读取文件夹,将json文件转化为txt文件

2023-05-16

读取文件夹,将json文件转化为txt文件

  • 一 样例1 json文件只有一个样本
    • 1 json文件内容
    • 2 代码转化
    • 3 效果图
  • 二 样例2 json文件中有多个样本
    • 1 json文件内容
    • 2 代码转化
    • 3 效果图
  • 三 样例3 json文件单样本
    • 1 json文件内容
    • 2 代码转化
    • 3 效果图

一 样例1 json文件只有一个样本

1 json文件内容

{
  "version": "4.5.7",
  "flags": {},
  "shapes": [
    {
      "label": "car",
      "points": [
        [
          737.3076923076923,
          244.8461538461538
        ],
        [
          1028.076923076923,
          555.6153846153846
        ]
      ],
      "group_id": null,
      "shape_type": "rectangle",
      "flags": {}
    }
  ],
  "imagePath": "..\\..\\images\\train2017\\000001.jpg",
  "imageData": "/9j/4AAQSkZJR"

2 代码转化

读取文件夹,将json文件转化为txt文件,即将JSON的关键数据读出

import os
import json


json_dir = 'C:/Users/YourName/Desktop/coco128/labels/train2017/'  # json文件路径
out_dir = 'C:/Users/YourName/Desktop/output/'  # 输出的 txt 文件路径

def get_json(json_file, filename):
    # 读取 json 文件数据
    with open(json_file, 'r') as load_f:
        content = json.load(load_f)
    
    # # 循环处理
    tmp = filename
    filename_txt = out_dir + tmp + '.txt'
    #创建txt文件
    fp = open(filename_txt, mode="w", encoding="utf-8")
    #将数据写入文件
    # 计算 yolo 数据格式所需要的中心点的 相对 x, y 坐标, w,h 的值
    x = (content["shapes"][0])["points"][0][0]  
    y = (content["shapes"][0])["points"][0][1] 
    w = (content["shapes"][0])["points"][1][0] - (content["shapes"][0])["points"][0][0] 
    h = (content["shapes"][0])["points"][1][1] - (content["shapes"][0])["points"][0][1]
    fp = open(filename_txt, mode="r+", encoding="utf-8")
    file_str = str(filename) + ' ' + str(round(x, 6)) + ' ' + str(round(y, 6)) + ' ' + str(round(w, 6)) + \
            ' ' + str(round(h, 6))
    line_data = fp.readlines()

    if len(line_data) != 0:
        fp.write('\n' + file_str)
    else:
        fp.write(file_str)
    fp.close()


def main():
    files= os.listdir(json_dir) #得到文件夹下的所有文件名称
    s = []
    for file in files: #遍历文件夹
        filename = file.split('.')[0]
        # print(tmp)
        get_json(json_dir+file, filename)
    


if __name__ == '__main__':
    main()

3 效果图

原:在这里插入图片描述
改后:
在这里插入图片描述
txt内容:
在这里插入图片描述

二 样例2 json文件中有多个样本

1 json文件内容

{
  "version": "3.16.2",
  "flags": {},
  "shapes": [
    {
      "label": "00000001",
      "line_color": null,
      "fill_color": null,
      "points": [
        [
          167.0,
          114.0
        ],
        [
          146.0,
          142.0
        ],
        [
          177.0,
          145.0
        ],
        [
          214.0,
          129.0
        ],
        [
          210.0,
          102.0
        ],
        [
          185.0,
          107.0
        ]
      ],
     "shape_type": "polygon",
      "flags": {}
    },
    {
      "label": "00004702",
      "line_color": null,
      "fill_color": null,
      "points": [
        [
          306.0,
          71.0
        ],
        [
          289.0,
          109.0
        ],
        [
          321.0,
          112.0
        ],
        [
          359.0,
          78.0
        ],
        [
          329.0,
          57.0
        ]
      ],
      "shape_type": "polygon",
      "flags": {}
    }
  ],
"lineColor": [
    0,
    255,
    0,
    128
  ],
  "fillColor": [
    255,
    0,
    0,
    128
  ],
  "imagePath": "048.jpg",
  "imageData": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a"
}

2 代码转化

import os
import json


json_dir = 'C:/Users/YourName/Desktop/coco/jsonDir/'  # json文件路径
out_dir = 'C:/Users/YourName/Desktop/coco/outputDir/'  # 输出的 txt 文件路径

def get_json(json_file, filename):
    # 读取 json 文件数据
    with open(json_file, 'r') as load_f:
        content = json.load(load_f)
    
    # # 循环处理
    tmp = filename
    filename_txt = out_dir + tmp + '.txt'
    #创建txt文件
    fp = open(filename_txt, mode="w", encoding="utf-8")
    #将数据写入文件
    str_tmp = "" #存储字符串内容
    #1.获取version、flags数据
    version = content["version"]
    flags = content["flags"]
    #暂存内容
    str_tmp = str(version)+"\n"+str(flags)+"\n"

    #2. 获取shapes数组中的数据
    #循环读取 shapes中的每一组数据,json文件中有2组数据,循环则是2个 [0,1]
    for i in range(2):
      label = (content["shapes"][i])["label"]
      line_color = (content["shapes"][i])["line_color"]
      fill_color = (content["shapes"][i])["fill_color"]
      str_tmp += str(label) + "\n" + str(line_color) + "\n"  + str(fill_color) + "\n"  ##暂存内容
      #读取points中的数据,有6组数据
      points_size = len((content["shapes"][i])["points"])
      for j in range(points_size):
          x = (content["shapes"][i])["points"][j][0]
          y = (content["shapes"][i])["points"][j][1]
          str_tmp += str(x) + "        " + str(y) + "\n"  ##暂存内容
      #读取shape_type,flags
      shape_type = (content["shapes"][i])["shape_type"]
      flags = (content["shapes"][i])["flags"]
      str_tmp += str(shape_type) + "        " + str(flags) + "\n"  ##暂存内容
    #3. 获取lineColor、fillColor、imagePath、imageData
    line_Color = content["lineColor"]
    fill_Color = content["fillColor"]
    imagePath = content["imagePath"]
    imageData = content["imageData"]

    #lineColor是数组,获取并存储lineColor
    for i in range(len(line_Color)):
        str_tmp += str(line_Color[i]) + "   "
    str_tmp += "\n" #换行效果
    #fillColor与lineColor一样,也为数组,获取并存储fillColor
    for i in range(len(fill_Color)):
        str_tmp += str(fill_Color[i]) + "   "
    str_tmp += "\n" #换行效果
    str_tmp += str(imagePath) + "        " + str(imageData) + "\n"  ##暂存内容
    fp = open(filename_txt, mode="r+", encoding="utf-8")
    file_str = str_tmp
    line_data = fp.readlines()

    if len(line_data) != 0:
        fp.write('\n' + file_str)
    else:
        fp.write(file_str)
    fp.close()


def main():
    files= os.listdir(json_dir) #得到文件夹下的所有文件名称
    s = []
    for file in files: #遍历文件夹
        filename = file.split('.')[0]
        # print(tmp)
        get_json(json_dir+file, filename)
    


if __name__ == '__main__':
    main()

3 效果图

在这里插入图片描述

三 样例3 json文件单样本

1 json文件内容

{"marks":[[240.47823834196888,57.812953367875636],[226.80673575129526,388.58290155440415],[235.33316062176164,227.56113989637305]],"slots":[[3,1, 1,90],[2,3,1,90]]}

2 代码转化

import os
import json

json_dir = 'C:/Users/QiYan/Desktop/train/'  # 放json文件路径,train是放json文件的文件夹
out_dir = 'C:/Users/QiYan/Desktop/output/'  # 输出的 txt 文件路径,output是放txt文件的文件夹

def get_json(json_file, filename):
    # 读取 json 文件数据
    with open(json_file, 'r') as load_f:
        content = json.load(load_f)
    
    # # 循环处理
    tmp = filename
    filename_txt = out_dir + tmp + '.txt'
    #创建txt文件
    fp = open(filename_txt, mode="w", encoding="utf-8")
    #将数据写入文件
    #首先是mark,二维数组3*2,提取数据如下
    x1y1 = content["marks"][0][0]
    x1y2 = content["marks"][0][1]
    x2y1 = content["marks"][1][0]
    x2y2 = content["marks"][1][1]
    x3y1 = content["marks"][2][0]
    x3y2 = content["marks"][2][1]
    #slots为2*4的二维数组,提取数据如下
    s_x1y1 = content["slots"][0][0]
    s_x1y2 = content["slots"][0][1]
    s_x1y3 = content["slots"][0][2]
    s_x1y4 = content["slots"][0][3]
    s_x2y1 = content["slots"][1][0]
    s_x2y2 = content["slots"][1][1]
    s_x2y3 = content["slots"][1][2]
    s_x2y4 = content["slots"][1][3]
    #数据写入txt文档
    fp = open(filename_txt, mode="r+", encoding="utf-8")
    file_str = str(filename) + '\n' + str(round(x1y1, 6)) + ' ' + str(round(x1y2, 6)) + ' ' +\
    str(round(x2y1, 6)) + ' ' + str(round(x2y2, 6)) + str(round(x3y1, 6)) + ' ' +  \
    str(round(x3y2, 6)) + '\n' + str(round(s_x1y1, 6)) +' ' + str(round(s_x1y2, 6)) + ' ' + \
    str(round(s_x1y3, 6)) + ' ' + str(round(s_x1y4, 6)) +' ' + str(round(s_x2y1, 6)) + \
    str(round(s_x2y2, 6)) + ' ' + str(round(s_x2y3, 6)) +' ' + str(round(s_x2y4, 6))   
    line_data = fp.readlines()

    if len(line_data) != 0:
        fp.write('\n' + file_str)
    else:
        fp.write(file_str)
    fp.close()


def main():
    files= os.listdir(json_dir) #得到文件夹下的所有文件名称
    s = []
    for file in files: #遍历文件夹
        filename = file.split('.')[0]
        # print(tmp)
        get_json(json_dir+file, filename)
    


if __name__ == '__main__':
    main()

3 效果图

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批量处理:读取文件夹,将json文件转化为txt文件 的相关文章

随机推荐

  • ROS2读取realsense摄像头数据并发布topic到ros2

    环境 xff1a ubuntu18 04 ros2 写在前面 xff1a 最近在写项目的自动化测试 xff0c 需要实现先从realsense camera录制一段数据 xff0c 在test case中需要以发布topic的方式播放录制的
  • 研究型论文_基于自编码器和集成学习的半监督异常检测算法

    文章目录 基于自编码器和集成学习的半监督异常检测算法论文摘要论文解决的问题1 算法原理2 算法设计算法的创新点参考资料 基于自编码器和集成学习的半监督异常检测算法 论文摘要 异常检测用来预处理数据 xff0c 挖掘异类数据信息 xff0c
  • 直接上干货!为什么Flutter能最好地改变移动开发?成功拿下大厂offer

    前言 这里整理的是一些与技术没有直接关系的面试题 xff0c 但是能够考察你的综合水平 xff0c 所以不要以为不是技术问题 xff0c 就不看 xff0c 往往有时候就是这样一些细节的题目被忽视 xff0c 而错过了一次次面试机会 想要成
  • 云服务器上ros安装

    Ubuntu16 04安装ROS Kinetic详细过程 xff1a https blog csdn net weixin 43159148 article details 83375218 出现xx release not found x
  • 从驱动到转行到游戏开发的经验

    已经转行 xff0c 但是从自己熟悉的行业转入一个新行业 xff0c 各种心酸只有自己知道 以下是我转行中所读到的图形学相关书 xff1a 1 xff0c Opengl 编程指南 或者龙书 不管你是否志在游戏行业都推荐龙书 xff0c 书中
  • vtk 提取等值面并显示

    marchingcube是提取等值面比较通用的算法 xff0c 本文利用vtk 的marching cube接口提取等值面 xff0c 并通过其绘制管线把等值面绘制出来 其原理请参考下文 xff1a 1 等值面的定义及其三角面片近似 等值面
  • 关于Runnable 和 Thread的应用场景

    摘自StackOverflow 个人觉得比较靠谱的答案 xff0c 细节请看url http stackoverflow com questions 541487 implements runnable vs extends thread
  • JAVA 泛型中的<T> 和 <?> 的应用场景

    在JAVA 泛型中 xff0c 经常看到 lt gt 应用场景为当不确定类型时 因为泛型的输入参数是类型 xff0c 而有一些状况下我们并不能确定类型
  • 构造块和静态块的应用场景

    待补充 xff0c 有点懒
  • 在Github和Git上fork之简单指南

    from https linux cn article 4292 1 rss html 以我的经验来看 xff0c 刚接触Git和GitHub时 xff0c 最困扰的一件事情就是尝试解决下面的问题 xff1a 在Git和GitHub上 xf
  • java 同步原理

    还未来得及写文章呢
  • (华清远见)嵌入式学习月度总结

    文章声明 xff1a 本次总结仅代表个人观点 xff0c 至于哪一家培训机构怎么样 xff0c 同xxx培训比起来如何 xff0c 是否值得报名参加 xff0c 都应该由你自己去斟酌决定 xff0c 仅提供个人感受 xff0c 不提供建议
  • FreeRTOS学习记录 01--中断管理

    文章目录 0 前言1 Cortex M 中断管理1 1 中断配置1 2 优先级分组配置1 3 FreeRTOS中断 PendSv和Systick中断优先级配置 2 FreeRTOS的临界段代码保护和开关中断2 1 临界段代码保护2 2 中断
  • 通信网络中的透传到底什么意思?

    1 透传 xff1a 指与传输网络的介质 调制解调方式 传输方式 传输协议无关的一种数据传送方式 这就好比快递邮件 xff0c 邮件中间有可能通过自行车 汽车 火车 飞机的多种组合运输方式到达您的手上 xff0c 但您不用关心它们中间经历了
  • 2016年个人工作总结、生活总结 和 2017年个人工作计划、生活计划

    个人总结 xff0c 分别对2016年的工作生活总结和计划安排 xff0c 让自己在可预见的目标路线上前进 xff0c 为了自己也为了以后的幸福 一 2016年工作总结 1 2016年上半年 xff0c 完成小步环卫的智能手环 后台 APP
  • pip安装baidu-aip的方法

    记住你以后就有名字啦 万能小p xff1a pip install baidu aip i http pypi douban com simple trusted host pypi douban com 中间错误是这样的 xff1a Co
  • 计算机网络习题集_主打选择填空

    计算机网络习题 计算机网络习题第一章 概述第二章 物理层第三章 数据链路层第四章 网络层第五章 运输层第六章 应用层 附上电子版 链接 xff1a https pan baidu com s 1Y XyB3uAitkz0FtW6u1n0g
  • 不能错过的六大在线画图网站

    图表网站列表 xff1a 1 Highcharts2 online visual paradigm3 everviz4 echarts5 AntV6 fooplot 1 Highcharts Highcharts xff1a https w
  • ubuntu software database is broken问题解决

    ubuntu software database is broken 出现如下字样 xff1a ubuntu software database is broken It is impossible to install or remove
  • 批量处理:读取文件夹,将json文件转化为txt文件

    读取文件夹 xff0c 将json文件转化为txt文件 一 样例1 json文件只有一个样本1 json文件内容2 代码转化3 效果图 二 样例2 json文件中有多个样本1 json文件内容2 代码转化3 效果图 三 样例3 json文件