这段代码的功能是将一个文件夹下的所有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变量中; - 定义一个Python字典对象
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文件时,程序结束运行。
这段Python代码将一个文件夹下的所有JSON文件转换成特定格式,提取原文件的特定字段并进行结构化处理,主要涉及XML到OrderedDict转换、数据重构及JSON写入。
7475

被折叠的 条评论
为什么被折叠?



