赞
踩
这段代码的功能是将一个文件夹下的所有JSON文件转换为一个特定格式的JSON文件,转换后的JSON文件中包含了原JSON文件中的某些字段,并将其它字段按照一定的格式进行转换。
- # 导入必要的库
- import xmltodict
- import json
- import os
-
- # 输入和输出文件夹路径
- input_folder_path = 'json'
- output_folder_path = 'json_2'
-
- # 遍历输入文件夹中的所有文件
- for filename in os.listdir(input_folder_path):
- if filename.endswith('.json'):
- # 构造输入和输出文件路径
- input_file_path = os.path.join(input_folder_path, filename)
- output_file_path = os.path.join(output_folder_path, filename.replace('.json', '.json'))
-
- # 打开输入文件并将其解析为OrderedDict对象
- with open(input_file_path, 'r', encoding='utf-8') as input_file:
- xml_data = input_file.read()
- data_dict = xmltodict.parse(xml_data)
-
- # 进行数据转换
- anylabeling = {
- "version": "0.2.11",
- "flags": {},
- "shapes": [
- {
- "label": data_dict["annotation"]["object"]["name"],
- "text": "",
- "points": [
- [
- data_dict["annotation"]["object"]["bndbox"]["xmin"],
- data_dict["annotation"]["object"]["bndbox"]["ymin"]
- ],
- [
- data_dict["annotation"]["object"]["bndbox"]["xmax"],
- data_dict["annotation"]["object"]["bndbox"]["ymax"]
- ]
- ],
- "group_id": None,
- "shape_type": "rectangle",
- "flags": {}
- }
- ],
- "imagePath": data_dict["annotation"]["filename"],
- "imageData": None,
- "imageHeight": data_dict["annotation"]["size"]["height"],
- "imageWidth": data_dict["annotation"]["size"]["width"]
- }
-
- # 将数据写入输出文件
- with open(output_file_path, 'w', encoding='utf-8') as output_file:
- json.dump(anylabeling, output_file, indent=4)
import
导入了三个Python标准库和一个第三方库:xmltodict
:用于将XML数据转换为Python的OrderedDict对象;json
:用于将Python对象序列化为JSON格式的字符串;os
:用于操作操作系统相关的功能,如路径等;input_folder_path
和output_folder_path
,分别表示输入和输出文件夹路径;os.listdir()
函数遍历输入文件夹中的所有文件,并使用if
语句过滤出.json
文件;.json
文件,构造了输入和输出文件的路径,分别使用os.path.join()
和replace()
函数;with
语句打开输入文件,并使用xmltodict.parse()
函数将XML数据解析为Python的OrderedDict对象,存储在data_dict
变量中;anylabeling
,该对象表示特定格式的JSON数据。该字典包含以下字段:flags
:一个空字典,表示标记的额外信息;
shapes
:一个包含一个字典元素的列表,表示要标记的图形信息;imagePath
:字符串类型,表示图片文件的路径;imageData
:None类型,表示图片的二进制数据;imageHeight
:整数类型,表示图片的高度;imageWidth
:整数类型,表示图片的宽度。label
:字符串类型,表示标记的名称;text
:字符串类型,表示标记的文本信息;points
:一个包含两个列表元素的列表,每个列表元素表示一个点的坐标(x, y);group_id
:None类型,表示分组信息;shape_type
:字符串类型,表示标记的形状类型;flags
:一个空字典,表示标记的额外信息;将data_dict
中的信息填充到anylabeling
中,包括图片的文件名、宽度、高度、标记的名称和位置信息;
使用with
语句打开输出文件,并使用json.dump()
函数将anylabeling
对象序列化为JSON格式的字符串,保存到输出文件中;
当遍历完所有的.json
文件时,程序结束运行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。