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

JSON标注数据提取URL与分类值写入CSV的行转列实现问题

解决方案

你现有代码的问题是每提取一个字段就单独调用一次writerow写入一行,所以单条数据的三个字段会被拆分到三行。调整逻辑为:先组装完成单条数据的所有列内容,再一次性写入一行即可。

修改后代码(更稳定,不依赖分类顺序)

import csv

# 定义CSV表头,可按需修改列名
headers = ['Labeled Data URL', 'bathroom_size', 'bathroom_quality']

with open('test3.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    # 写入表头
    writer.writerow(headers)
    for bill in data:
        # 提取URL字段
        url = bill["Labeled Data"]
        size_val = None
        quality_val = None
        # 按分类标题匹配对应值,避免JSON分类顺序变化导致列错位
        for item in bill["Label"]["classifications"]:
            if item["title"] == "What is the size of bathoom?":
                size_val = item["answer"]["value"]
            elif item["title"] == "What quality is the bathroom?":
                quality_val = item["answer"]["value"]
        # 三个字段组装为一行写入
        writer.writerow([url, size_val, quality_val])

简化写法(仅适用于classifications数组顺序固定的场景)

如果你确定每条数据的classifications数组永远是「面积分类在前、质量分类在后」,可以简化为按索引直接取值:

import csv

headers = ['Labeled Data URL', 'bathroom_size', 'bathroom_quality']

with open('test3.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(headers)
    for bill in data:
        url = bill["Labeled Data"]
        size_val = bill["Label"]["classifications"][0]["answer"]["value"]
        quality_val = bill["Label"]["classifications"][1]["answer"]["value"]
        writer.writerow([url, size_val, quality_val])

补充说明:代码中添加newline=''是Python写CSV的标准配置,可避免Windows系统下生成的CSV出现多余空行;指定encoding='utf-8'可避免特殊字符乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:30:01