我在每个图像的 json 文件中存储了注释,但这些文件没有图像的文件名作为其中的键,因此我想输入这些 json 文件的文件名作为其中的字段。
eg:| ||应包含文件名字段。
Train1.jpeg.json
我正在尝试使这些文件对 coco 格式有效。
{"filename":"train1.jpeg"
"description": "",
"tags": [],
"size": {
"height": 150,
"width": 150
},
"objects": [
{
"id": 458095953,
"classId": 1528218,
"description": "",
"geometryType": "polygon",
"labelerLogin": "shepherd25",
"createdAt": "2020-06-06T13:58:24.814Z",
"updatedAt": "2020-06-06T13:58:54.280Z",
"tags": [],
"classTitle": "Handgun",
"points": {
"exterior": [
[
36,
1
],
[
34,
6
],
[
31,
8
],
[
34,
14
],
[
25,
91
],
[
28,
99
],
[
28,
105
],
[
43,
110
],
[
68,
110
],
[
70,
99
],
[
70,
99
],
[
76,
98
],
[
94,
19
],
[
102,
12
],
[
99,
0
]
],
"interior": []
}
}
]
}
I am trying to make these files valid for coco format.
import json
import os
# 设置包含 JSON 文件的目录
directory = "path/to/your/json/files"
# 循环遍历目录中的所有文件
for filename in os.listdir(directory):
if filename.endswith(".json"):
# 从文件名中获取文件名(不带扩展名)
file_name_without_extension = os.path.splitext(filename)[0]
# 构造完整的文件路径
file_path = os.path.join(directory, filename)
# 打开 JSON 文件并加载其内容
with open(file_path, 'r+') as f:
data = json.load(f)
# 将文件名添加到 JSON 数据中
data['filename'] = file_name_without_extension + ".jpeg"
# 将文件指针重置到开头
f.seek(0)
# 使用修改后的数据覆盖文件内容
json.dump(data, f, indent=4)
# 截断文件以防剩余数据
f.truncate()
说明:
- 导入必要的库:
-
json
:用于处理 JSON 文件。 -
os
:用于与文件系统交互。 -
设置目录:
-
将
directory
变量替换为包含 JSON 文件的目录的路径。 -
循环遍历 JSON 文件:
- 代码循环遍历指定目录中的所有文件。
-
os.listdir(directory)
返回目录中所有文件和文件夹的列表。 -
filename.endswith('.json')
检查文件是否具有.json
扩展名。 -
提取文件名:
-
os.path.splitext(filename)[0]
从文件名中提取文件名(不带扩展名)。 -
加载 JSON 数据:
-
with open(file_path, 'r+') as f:
打开指定的文件进行读取和写入 (r+
)。 -
json.load(f)
从文件中加载 JSON 数据并将其存储在data
变量中。 -
添加文件名:
-
data['filename'] = file_name_without_extension + ".jpeg"
将filename
键添加到 JSON 数据中,并将其值设置为文件名(不带扩展名)加上.jpeg
。 -
写入修改后的数据:
-
f.seek(0)
将文件指针重置到文件的开头。 -
json.dump(data, f, indent=4)
将修改后的 JSON 数据写回文件,并使用缩进使其更具可读性。 -
f.truncate()
截断文件,以防原始数据比修改后的数据长。
如何使用:
-
将此代码保存为 Python 文件(例如
add_filename_to_json.py
)。 - 打开终端或命令提示符。
- 使用以下命令运行脚本:
bash
python add_filename_to_json.py
这会将
filename
键添加到指定目录中的所有 JSON 文件中。