You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现CSV转指定格式JSON:添加编号键并改为对象结构

问题:将CSV转换为带编号键的JSON对象结构

我是Python新手,想把下面的CSV文件:

1.0,100.0,303.0,619.0,figure  
338.0,162.0,143.0,423.0,text  
85.0,768.0,554.0,39.0,text  
504.0,164.0,24.0,238.0,subtitle  
120.0,727.0,182.0,13.0,caption  
540.0,165.0,62.0,428.0,title  
614.0,163.0,23.0,133.0,tagline  
317.0,629.0,113.0,113.0,figure  
443.0,629.0,112.0,113.0,figure  
568.0,628.0,121.0,114.0,figure  

转换成如下格式的JSON:

{
    "record_01": {
        "x": "1.0", 
        "y": "100.0", 
        "width": "303.0", 
        "height": "619.0", 
        "tag": "figure"
    }, 
    "record_02": {
        "x": "338.0", 
        "y": "162.0",
        "width": "143.0", 
        "height": "423.0", 
        "tag": "text"
    }, 
    "record_03": {
        "x": "85.0", 
        "y": "768.0", 
        "width": "554.0", 
        "height": "39.0", 
        "tag": "text"
    },
    // ... 以此类推
}

当前我的代码是:

import csv
import json

def convert_json(csvPath, jsonPath):
    fieldnames = ["x", "y", "width", "height", "tag"]
    with open(csvPath, "r", encoding="utf-8") as csvFile:
        csvReader = csv.DictReader(csvFile, fieldnames)
        data = []
        for rows in csvReader:
            data.append(rows)
    with open(jsonPath, "w", encoding="utf-8") as jsonFile:
        jsonFile.write(json.dumps(data, indent=4))

现在输出的是JSON数组(用中括号包裹),但我需要输出对象结构(大括号包裹),并且每个条目要有带两位编号的record_xx键。我试过把data改成字典,但没法用append方法,该怎么修改?


解决方案

核心是将存储数据的容器从列表改为字典,通过序号生成指定格式的键名,把每行数据对应存入字典。修改后的代码如下:

import csv
import json

fieldnames = ["x", "y", "width", "height", "tag"]

def convert_json(csvPath, jsonPath):
    with open(csvPath, "r", encoding="utf-8") as csvFile:
        csvReader = csv.DictReader(csvFile, fieldnames)
        data = {}
        # 用enumerate从1开始计数,生成两位补零的编号键
        for record_num, row in enumerate(csvReader, start=1):
            data[f"record_{record_num:02d}"] = row
    with open(jsonPath, "w", encoding="utf-8") as jsonFile:
        json.dump(data, jsonFile, indent=4)

csvPath = "data.csv"
jsonPath = "data.json"
convert_json(csvPath, jsonPath)

关键修改说明:

  • 替换数据容器:把data = []改为data = {},因为目标JSON是键值对结构的对象,而非数组
  • 生成编号键:使用enumerate(..., start=1)获取从1开始的行号,通过f"record_{record_num:02d}"生成带两位补零的键名(比如1→record_01,10→record_10)
  • 字典赋值替代列表append:直接通过data[key] = row将每行数据存入字典,这是字典添加键值对的标准方式
  • 简化写入操作:用json.dump直接将字典写入文件,比json.dumps转成字符串后再写入更简洁高效

内容的提问来源于stack exchange,提问作者sabo97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:15:58