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()
作者:资源补给站