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

Python作业:JSON转CSV格式异常,求无额外模块的修正方案

问题修正方案

问题根源

你看到的方括号和单引号,是因为直接将列表对象转为字符串写入文件导致的(比如write(str(row_list))),Python会把列表的默认字符串表示(带[]和'')直接写入,而非CSV要求的纯逗号分隔格式。

修正步骤

1. 明确数据处理逻辑

假设你从sat.json读取的数据是字典列表(每个字典对应一条SAT记录,键为表头),核心流程:

  • 提取表头:取第一条数据的键作为CSV表头
  • 对传入的DBN列表做升序排序
  • 遍历排序后的DBN,匹配对应记录,提取字段值后拼接为CSV格式的行

2. 修正save_as_csv方法代码

以下是完整修正后的类实现:

import json

class SatData:
    def __init__(self):
        # 从sat.json读取数据
        with open('sat.json', 'r', encoding='utf-8') as f:
            self.sat_records = json.load(f)
    
    def save_as_csv(self, dbn_list):
        # 提取CSV表头(假设所有记录的字段一致)
        csv_header = list(self.sat_records[0].keys())
        # 对传入的DBN列表按升序排序
        sorted_dbns = sorted(dbn_list)
        
        with open('output.csv', 'w', encoding='utf-8') as csv_file:
            # 写入表头行
            csv_file.write(','.join(csv_header) + '\n')
            # 遍历排序后的DBN,写入对应数据行
            for dbn in sorted_dbns:
                # 找到当前DBN对应的记录
                target_record = next(item for item in self.sat_records if item['DBN'] == dbn)
                # 提取表头对应的字段值,统一转为字符串(避免数字/布尔值拼接报错)
                row_values = [str(target_record[key]) for key in csv_header]
                # 拼接为CSV格式行并写入
                csv_file.write(','.join(row_values) + '\n')

3. 关键细节说明

  • 必须确保row_values中的每个元素都是字符串类型:直接用原始数值类型会导致','.join报错,转为字符串后才能正确拼接。
  • 绝对不能用str(row_values)生成行内容,必须通过','.join()直接拼接字符串元素,这是解决方括号和单引号问题的核心。
  • 如果字段内容包含逗号(比如学校名称带逗号),需要用双引号包裹字段,可调整row_values的生成逻辑:
    row_values = []
    for key in csv_header:
        value = str(target_record[key])
        if ',' in value:
            # 若字段含逗号,用双引号包裹,内部双引号转义为两个双引号
            row_values.append(f'"{value.replace('"', '""')}"')
        else:
            row_values.append(value)
    

内容的提问来源于stack exchange,提问作者gem's_dad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:13