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

Python写入CSV文件时所有ID被存入同一行如何解决?

问题原因

核心错误出在CSV写入逻辑:
csv.writer的writerow()方法会将传入的可迭代对象的每个元素作为同一行的一个列写入文件。你把所有ID收集到一维列表list_id后一次性调用writer.writerow(list_id),自然会把所有ID作为同一行的多列内容,用逗号拼接在同一行。
除此之外原代码还有3处可优化/错误点:

  • 对接口返回的JSON做了无意义的json.dumps后再json.loads操作,requests.Response.json()本身就已经返回解析完成的Python对象,不需要重复序列化反序列化
  • 定义的接口地址变量名为url,实际请求时传了不存在的url_v1,运行会直接抛NameError
  • 手动打开文件没有做异常兜底,容易出现文件句柄泄漏
修复方法

写完表头后,不要把所有ID一次性传入writerow,改为遍历每个ID,每次写入单条数据即可。推荐使用with上下文管理器处理文件IO,会自动完成文件关闭操作,不需要手动调用close()。

修正后可直接运行的代码
import requests
import csv
from jsonpath_ng import parse

# 替换为实际业务接口地址
url = 'your_real_api_endpoint'

headers = {
       "Authorization": "Bearer your_real_auth_token"
    }

response = requests.get(url, headers=headers)
resp_data = response.json()
# 提取所有id字段
id_parser = parse('$..id')
id_results = id_parser.find(resp_data)

with open('C:/File/test.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    # 写入表头
    writer.writerow(['id'])
    # 逐行写入单个ID
    for res in id_results:
        writer.writerow([res.value])

如果要追求写入效率,也可以先把所有ID整理成二维列表结构,用writerows()批量写入:

with open('C:/File/test.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['id'])
    # 构造二维列表:每个元素是对应一行内容的单元素列表
    all_rows = [[item.value] for item in id_results]
    writer.writerows(all_rows)

运行后生成的CSV就会符合预期,首行是表头id,后续每行单独存储一个ID值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:51:29