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
相关产品推荐
相关产品推荐

