Python将JSON格式数据转换为TXT格式:详细教程与完整代码分享

这个代码主要是解析一个json文件 转换成多个txt文件使用的,尤其是便于yolo训练

代码详解
设置目录路径:
json_dir:JSON文件存储的目录。
out_dir:输出的TXT文件存储的目录。
主要是修改这两个地方即可,话不多说 ,咱们直接附代码

import os
import json
from PIL import Image
import warnings

"""
json_dir:JSON文件存储的目录。
out_dir:输出的TXT文件存储的目录。
主要是修改这两个地方即可,图片尺寸一般都是640
"""

warnings.filterwarnings("ignore")

json_dir = 'D:/Users/19114/anaconda3/envs/yolo/Lib/site-packages/ultralytics/SK-MPSO-BP/data4/json'  # JSON文件路径
out_dir = 'D:/Users/19114/anaconda3/envs/yolo/Lib/site-packages/ultralytics/SK-MPSO-BP/data4/dataset'  # 输出的TXT文件路径

# 确保输出目录存在
if not os.path.exists(out_dir):
    os.makedirs(out_dir)

def get_json(json_file, filename):
    # 读取JSON文件数据
    with open(json_file, 'r') as load_f:
        content = json.load(load_f)

    image_width = 640  # 图片的宽
    image_height = 640  # 图片的高

    # 构造输出的TXT文件名,保持原文件名
    filename_txt = os.path.join(out_dir, filename + '.txt')

    # 创建或清空TXT文件
    with open(filename_txt, mode="w", encoding="utf-8") as fp:
        pass  # 创建一个空文件然后关闭

    # 类别名称,对应标签序号
    name = ['Dry_rot','Insect_hole','Normal','Damage']
    name_class = {name[i]: i for i in range(len(name))}
    con = content['shapes']

    # 逐个处理标注信息
    for t in con:
        num = name_class[t['label']]

        point = t['points']
        # 计算中心点坐标和宽高(归一化)
        x = (((point[1][0] - point[0][0]) / 2) + point[0][0]) / image_width
        y = (((point[1][1] - point[0][1]) / 2) + point[0][1]) / image_height
        w = (point[1][0] - point[0][0]) / image_width
        h = (point[1][1] - point[0][1]) / image_height

        # 将计算得到的信息写入TXT文件
        file_str = str(num) + ' ' + str(round(x, 6)) + ' ' + str(round(y, 6)) + ' ' + str(round(w, 6)) + \
                   ' ' + str(round(h, 6))
        with open(filename_txt, mode="a", encoding="utf-8") as fp:
            fp.write(file_str + '\n')

def main():
    files = os.listdir(json_dir)  # 得到文件夹下的所有文件名称
    for file in files:  # 遍历文件夹
        if file.endswith('.json'):  # 只处理JSON文件
            filename = os.path.splitext(file)[0]  # 获取不含扩展名的文件名
            json_file_path = os.path.join(json_dir, file)  # 构造完整的JSON文件路径
            get_json(json_file_path, filename)

print("转化完成")

if __name__ == '__main__':
    main()

作者:资源补给站

物联沃分享整理
物联沃-IOTWORD物联网 » Python将JSON格式数据转换为TXT格式:详细教程与完整代码分享

发表回复