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

使用csv模块写入指定列到CSV时遇ValueError问题求助

解决csv.DictWriter写入时存在额外字段的报错问题

你遇到的ValueError: dict contains fields not in fieldnames错误,是因为csv.DictWriter默认会严格校验每个数据字典的键是否都在指定的fieldnames列表里,一旦发现额外字段就会抛出错误(默认参数extrasaction='raise')。这里有两种简单的解决方法:

方法一:设置extrasaction='ignore'忽略额外字段

直接在初始化DictWriter时添加extrasaction='ignore'参数,让它自动跳过不在fieldnames里的字段,无需手动处理数据:

import csv

name_keys = ['DATASET ID', 'SOURCE NAME', 'NAME']

data = [
   {
      "DATASET ID":112313,
      "SOURCE NAME":"source 1",
      "NAME":"0",
      "TYPE":1,
      "Random":1 
   },
   {
      "DATASET ID":112315,
      "SOURCE NAME":"source 2",
      "NAME":"1",
      "TYPE":1,
      "Random":1 
   }]

file_path = "output.csv"  # 替换成你的目标文件路径

with open(file_path, 'w', encoding='UTF8', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=name_keys, extrasaction='ignore')
    writer.writeheader()  # 用专门的writeheader()写入表头,比手动writerow更规范
    writer.writerows(data)

方法二:手动过滤每个字典的字段

如果需要对数据做预处理(比如字段值格式调整),可以手动遍历每个数据字典,只保留name_keys中的字段:

import csv

name_keys = ['DATASET ID', 'SOURCE NAME', 'NAME']

data = [
   {
      "DATASET ID":112313,
      "SOURCE NAME":"source 1",
      "NAME":"0",
      "TYPE":1,
      "Random":1 
   },
   {
      "DATASET ID":112315,
      "SOURCE NAME":"source 2",
      "NAME":"1",
      "TYPE":1,
      "Random":1 
   }]

file_path = "output.csv"  # 替换成你的目标文件路径

# 生成仅包含指定字段的新数据列表
filtered_data = [{key: item[key] for key in name_keys} for item in data]

with open(file_path, 'w', encoding='UTF8', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=name_keys)
    writer.writeheader()
    writer.writerows(filtered_data)

这种方法完全规避了额外字段的干扰,适合需要精细控制数据内容的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:22:03