Как мне массово переименовать мои файлы. json, используя значение имени внутри каждого файла JSON? - PullRequest
0 голосов
/ 03 августа 2020

O есть папка с 1800 json файлами. Мне нужно массово переименовать все 1800 файлов с парой ключ-значение, уникальной для каждого из файлов JSON. Например, каждый JSON хранит это внутри и изначально называется «03801f63a9bf54d2c7b30a7d121c6359-asset. json»,

{
"asset": {
    "format": "PNG",
    "id": "03801f63a9bf54d2c7b30a7d121c6359",
    "name": "IMG_2133.PNG",
    "path": "file:/home/kai/JSON2YOLO/training-images/imagess/IMG_2133.PNG",
    "size": {
        "width": 1920,
        "height": 1080
    },
    "state": 2,
    "type": 1
},
"regions": [
    {
        "id": "SLrFhEAR0",
        "type": "RECTANGLE",
        "tags": [
            "X"
        ],
        "boundingBox": {
            "height": 653.9723502304148,
            "width": 645.9720062208398,
            "left": 1071.9751166407466,
            "top": 99.53917050691241
        },
        "points": [
            {
                "x": 1071.9751166407466,
                "y": 99.53917050691241
            },
            {
                "x": 1717.9471228615864,
                "y": 99.53917050691241
            },
            {
                "x": 1717.9471228615864,
                "y": 753.5115207373271
            },
            {
                "x": 1071.9751166407466,
                "y": 753.5115207373271
            }
        ]
    },
    {
        "id": "SEEt8pqnV",
        "type": "RECTANGLE",
        "tags": [
            "Y"
        ],
        "boundingBox": {
            "height": 421.7972350230415,
            "width": 576.049766718507,
            "left": 17.671073094867808,
            "top": 89.13810483870968
        },
        "points": [
            {
                "x": 17.671073094867808,
                "y": 89.13810483870968
            },
            {
                "x": 593.7208398133748,
                "y": 89.13810483870968
            },
            {
                "x": 593.7208398133748,
                "y": 510.9353398617512
            },
            {
                "x": 17.671073094867808,
                "y": 510.9353398617512
            }
        ]
    }
],
"version": "2.2.0" }

необходимо переименовать имя файла из «03801f63a9bf54d2c7b30a7d *. "в" IMG_2133 "с расширением JSON .json, чтобы имя файла оканчивалось как" IMG_2133. json ". Мне нужно взять все 1800 json файлов и переименовать их, указав их значения имени.

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

это должно работать при трех условиях:

- вы находитесь на windows (потому что я использовал «/» в своих путях)

- имена всех новых файлов разные ( по очевидным причинам)

- и новые имена файлов не содержат символа точки (если некоторые имена содержат точку, скажите мне, что я могу изменить скрипт для обработки этих случаев)

import json                                                         # this module is used to read json files
import os                                                           # this modules is used to get all the names of your json files and rename them

folder_path = "test_folder"                                         # you specifie the folder conatining your json files

files = os.listdir(folder_path)                                     # you all the files names in the specified folder

for file in files:                                                  # for each file in the folder
    with open(f"{folder_path}/{file}", "r") as f:                   # you open the file
        json_file = json.load(f)                                    # you get the infos stored in the json file as a dictionary
    filename = json_file["asset"]["name"].split(".")[0] + ".json"   # you generate the new filename from the dictionary
    os.rename(f"{folder_path}/{file}", f"{folder_path}/{filename}") # you rename the file

вам просто нужно указать путь к папке, в которой находятся ваши файлы, в переменной folder_path (строка 4)

Надеюсь, это было полезно

0 голосов
/ 03 августа 2020

Таким образом, вы должны перебрать все файлы в вашем каталоге. Откройте их с помощью библиотеки json, прочтите их имя из json, а затем переименуйте файл в это.

Вот кое-что, что я быстро собрал. Я не гарантирую, что это сработает, но это должно дать вам общее представление.

import os
import json
from os import listdir
from os.path import isfile, join

files = [f for f in listdir(os.getcwd()) if isfile(join(os.getcwd(), f))]

for f in files:
  if f.endswith('.json'):
    openFile=open(f,"r")
    fileData = json.load(openFile)
    oldName = fileData['asset']['name']
    newName = oldName.replace('.PNG', '.json')
    os.rename(f,newName)
    print("Renamed "+ oldName + " to " + newName)
...