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

Python写入CSV时出现List has no attribute 'keys'报错如何解决

List has no attribute 'keys' 报错排查与修复方案

报错核心原因

这个报错100%是因为你在代码中对列表类型的对象调用了只有字典才有的.keys()方法,结合你写接口数据转CSV的场景,90%的触发场景是使用csv.DictWriter时,误将列表对象当成字典传入了需要字典参数的逻辑里。

排查步骤

  • 先根据报错栈定位到调用.keys()的具体代码行,在该行前加类型打印语句,确认你操作的对象实际类型:
    # 把your_var替换成你调用.keys()的那个变量
    print(type(your_var), your_var[:2] if isinstance(your_var, list) else your_var)
    
  • 对照接口返回的JSON结构逐层核对:
    • 绝大多数接口返回的结构是响应状态码 + 业务数据列表的嵌套格式,比如{"code":0, "msg":"success", "data": [{"字段1":"值1", "字段2":"值2"}, {...}]},如果你直接对整个接口响应结果调用.keys()取表头、或者直接把整个响应传给DictWriter.writerows(),就会因为操作的对象层级不对触发报错——你真正要写入CSV的字典列表,是嵌套在data字段下的数组,不是响应最外层。
    • 检查你要写入的单条记录里,是否存在值为列表类型的字段,如果你误对这类字段值调用.keys()也会触发报错。

修复方案

按照预期CSV输出效果,直接参考下面的可运行逻辑调整即可:

import csv
import requests

# 拉取接口JSON数据
response = requests.get("替换为你的实际接口地址")
response.raise_for_status()
json_resp = response.json()

# !!这里替换为你实际JSON里存目标数据的列表路径
# 如果接口最外层直接返回列表,就写 record_list = json_resp
# 如果数据在data字段下,就写 record_list = json_resp["data"]
record_list = json_resp["data"]

# 前置校验:确保拿到的是列表、且列表内元素是字典
if not isinstance(record_list, list) or len(record_list) == 0:
    raise ValueError("接口返回的待写入数据格式不符合预期,或数据为空")
if not isinstance(record_list[0], dict):
    raise ValueError("数据列表内的元素不是字典格式,无法取键生成CSV表头")

# 写入CSV
with open("result.csv", "w", encoding="utf-8-sig", newline="") as csvfile:
    # 取第一条记录的键作为CSV表头
    writer = csv.DictWriter(csvfile, fieldnames=record_list[0].keys())
    writer.writeheader()
    for row in record_list:
        # 预处理列表/字典类型的字段,转成字符串避免写入异常
        processed_row = {}
        for key, value in row.items():
            if isinstance(value, (list, dict)):
                processed_row[key] = str(value)
            else:
                processed_row[key] = value
        writer.writerow(processed_row)

注意事项

  • 如果你的JSON存在多层嵌套(比如{"info": {"create_time":"2024-01-01", "author":"xxx"}}),需要提前把嵌套字段拍平,否则写入CSV的会是字典的原生字符串表示,不符合可读要求。
  • 写入CSV时指定encoding="utf-8-sig"可以避免中文乱码问题,加newline=""可以避免CSV出现多余空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:36:23