簡體   English   中英

使用 json 列表將 csv 保存在 python 中

[英]Save csv in python with json list

我正在嘗試從一個文件夾中解析 python 中的多個 json 文件並將它們保存到單個 csv 中。

這是我的“json”文件格式:

{
  "width": 4032,
  "height": 3024,
  "ispano": false,
  "objects": [
    {
      "key": "vERA48mAToOV36JrGge-8w",
      "label": "regulatory--no-heavy-goods-vehicles--g2",
      "bbox": {
        "xmin": 1702.96875,
        "ymin": 812.84765625,
        "xmax": 2181.375,
        "ymax": 1304.54296875
      },
      "properties": {
        "barrier": false,
        "occluded": false,
        "out-of-frame": false,
        "exterior": false,
        "ambiguous": false,
        "included": false,
        "direction-or-information": false,
        "highway": false,
        "dummy": false
      }
    },
    {
      "key": "MXdgK-YrQrSrATvLYkJ7kQ",
      "label": "information--dead-end--g1",
      "bbox": {
        "xmin": 1283.625,
        "ymin": 488.7421875,
        "xmax": 1739.390625,
        "ymax": 1050.57421875
      },
      "properties": {
        "barrier": false,
        "occluded": false,
        "out-of-frame": false,
        "exterior": false,
        "ambiguous": false,
        "included": false,
        "direction-or-information": false,
        "highway": false,
        "dummy": false
      }
    }
  ]
}


我不需要所有信息,所以我瀏覽了所有子詞典。 這就是我在 python 中提取數據的方式:

import pandas as pd
import glob
import json 
from datetime import datetime
import csv

data = []

root = glob.glob("./labels/*.json")

for single_file in root:
    with open(single_file, "r") as f:
        json_file = json.load(f)

我在列表中像這樣 append 迭代子字典:

for sub_list in json_file["objects"]:
    print (sub_info)

lst = []
count = 0
for key, val in sub_list.items():
    #print(val)
    lst.append([
        sub_child["key"],
        sub_child["label"],
        sub_child["bbox"]["xmin"],
        sub_child["bbox"]["ymin"],
        sub_child["bbox"]["xmax"],
        sub_child["bbox"]["ymax"]
    ])
#print(lst)

# Add headers
lst.insert(0, ["key","label","xmin","ymin","xmax","ymax"])

dir = "./"
with open(os.path.join(dir,"test.csv"),"w", newline="") as d:
    writer = csv.writer(d)
    #writer.writerow(lst)
    writer.writerows(lst)
    count += 1

print('updated csv')

它保存了一個名為“test.csv”的 csv 文件,但僅包含最后一行的信息,而不是來自所有 json 文件。

我想保存 csv ,其中包括所有 json 文件中提到的信息。

我想要這樣的 csv

| 文件名 | 關鍵 | label | 最小 | ymin | 最大 | ymax |

它包括對應的file_name、key、labels、xmin、ymin。 最大,最大。

你能幫我解決我的問題嗎?

您可以在迭代對象時將每一行寫入文件:

import glob
import json 
import csv

with open('test.csv', 'w', newline='') as f_csv:
    csv_output = csv.writer(f_csv)
    csv_output.writerow(["file_name", "key", "label", "xmin", "ymin", "xmax", "ymax"])
    
    for single_file in glob.glob("*.json"):
        print(single_file)
        
        with open(single_file) as f_json:
            json_data = json.load(f_json)

        for object in json_data["objects"]:
            csv_output.writerow([
                single_file,
                object["key"],
                object["label"],
                object["bbox"]["xmin"],
                object["bbox"]["ymin"],
                object["bbox"]["xmax"],
                object["bbox"]["ymax"]
            ])

給你test.txt如下:

file_name,key,label,xmin,ymin,xmax,ymax
test1.json,vERA48mAToOV36JrGge-8w,regulatory--no-heavy-goods-vehicles--g2,1702.96875,812.84765625,2181.375,1304.54296875
test1.json,MXdgK-YrQrSrATvLYkJ7kQ,information--dead-end--g1,1283.625,488.7421875,1739.390625,1050.57421875
test2.json,vERA48mAToOV36JrGge-8w,regulatory--no-heavy-goods-vehicles--g3,1702.96875,812.84765625,2181.375,1304.54296875
test2.json,MXdgK-YrQrSrATvLYkJ7kQ,information--dead-end--g1,1283.625,488.7421875,1739.390625,1050.57421875

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM