首页 > 编程问答 >如何将 json 文件的文件名写入同一个 json 文件的键值对?

如何将 json 文件的文件名写入同一个 json 文件的键值对?

时间:2024-07-23 16:15:09浏览次数:11  
标签:python json

我在每个图像的 json 文件中存储了注释,但这些文件没有图像的文件名作为其中的键,因此我想输入这些 json 文件的文件名作为其中的字段。

eg:| ||应包含文件名字段。

enter image description here

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()

说明:

  1. 导入必要的库:
  2. json :用于处理 JSON 文件。
  3. os :用于与文件系统交互。

  4. 设置目录:

  5. directory 变量替换为包含 JSON 文件的目录的路径。

  6. 循环遍历 JSON 文件:

  7. 代码循环遍历指定目录中的所有文件。
  8. os.listdir(directory) 返回目录中所有文件和文件夹的列表。
  9. filename.endswith('.json') 检查文件是否具有 .json 扩展名。

  10. 提取文件名:

  11. os.path.splitext(filename)[0] 从文件名中提取文件名(不带扩展名)。

  12. 加载 JSON 数据:

  13. with open(file_path, 'r+') as f: 打开指定的文件进行读取和写入 ( r+ )。
  14. json.load(f) 从文件中加载 JSON 数据并将其存储在 data 变量中。

  15. 添加文件名:

  16. data['filename'] = file_name_without_extension + ".jpeg" filename 键添加到 JSON 数据中,并将其值设置为文件名(不带扩展名)加上 .jpeg

  17. 写入修改后的数据:

  18. f.seek(0) 将文件指针重置到文件的开头。
  19. json.dump(data, f, indent=4) 将修改后的 JSON 数据写回文件,并使用缩进使其更具可读性。
  20. f.truncate() 截断文件,以防原始数据比修改后的数据长。

如何使用:

  1. 将此代码保存为 Python 文件(例如 add_filename_to_json.py )。
  2. 打开终端或命令提示符。
  3. 使用以下命令运行脚本:

bash python add_filename_to_json.py

这会将 filename 键添加到指定目录中的所有 JSON 文件中。

标签:python,json
From: 62374718

相关文章

  • Python - 检查签名注释是否属于特定类
    使用forsigininspect.signature.parameters.items():ifisinstance(sig[1].annotation,inspect._empty):print("empty")时,我从来没有让控制台说打印“空”。即使在if子句之前使用print(sig[1].annotation)时给出的输出是:<class'inspect._e......
  • 从代码调用 alembic 命令后,Python 记录器不再记录
    我在代码中使用alembic在应用程序启动时应用数据库迁移。我还使用Python的内置logginglib来登录终端。应用迁移后(或运行任何打印到alembic的命令),我的记录器停止工作。stdout代码:预期输出:importloggingimportalembic.commandfr......
  • python 使用 random模块生成随机测试数据
    前言python中可以使用random模块生成随机测试数据常用函数说明random.seed(a)设置初始化随机种子,可输出相同随机数序列;a取整数或浮点数,不设置时默认以系统时间为种子random.random()生成一个0.0到1.0之间的随机浮点数random.uniform(a,b)生成一个[a,b]之间......
  • c/c++ jsoncpp的基本使用
    一、概述jsoncpp官网作用:在c++中可以方便的组装及解析json格式的数据。二、代码示例voidMyJsonCpp::toJsonStr(){Json::ValuejsonValue;jsonValue["username"]="luoluoyang";jsonValue["password"]="123456";jsonValue["ag......
  • c 使用cJSON生成及解析json类型数据
    一、概述cJSON官网作用:可以在c程序中方便的进行json字符串的解析及生成 二、代码示例//组装一个json串voidCJsonTest::valueToJsonObject(){cJSON*root,*fmt;char*out;root=cJSON_CreateObject();//创建一个obj(申请了堆内存记得释放)......
  • Python 上债券的内部收益率
    在Excel中,有一个公式(IRR.Payment:https://support.microsoft.com/fr-fr/office/fonction-tri-paiements-de1242ec-6477-445b-b11b-a303ad9adc9d)计算债券的IRR。我正在尝试在python算法上重现这一点,以便能够在我的代码中计算它。我在网上找到了这段代码:importnumpy......
  • 使用Python连接ftps服务器时nlst返回错误
    我可以使用TotalCommander登录服务器:ftps://publishedprices.co.il用户名:“奥舍拉德”密码为空并带有lftp-uosherad:publishedprices.co.il但是当我尝试登录并使用Python获取文件列表时nlst函数返回超时代码:fromftplibimportFTP_TLS......
  • 在我的 python 代码中,我无法使用 slixmpp 连接到 Openfire 服务器
    在我的python代码中,我无法连接到Openfire服务器。我想连接到OpenFire服务器我的代码是importthreadingimporttkinterastkfromtkinterimportsimpledialog,scrolledtextimportjsonimportloggingimportasynciofromslixmppimportClientXMPPcla......
  • 如何在Python中获取字符的unicode?
    想要获取中文或越南语的汉名和日文字符的unicode我已经尝试过这些代码text="......
  • 三种语言实现计算逆序对的数量(C++/Python/Java)
    题目给定一个长度为......