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

Python写入新CSV文件异常:仅显示表头无2008年游戏数据

解决Python写入CSV仅重复表头无数据的问题

问题根源分析

你遇到的问题大概率是写入CSV时未正确配置DictWriter的字段名,或者没有正确调用写入数据的方法,另外读取代码里的next(csv_reader)是多余的,会导致丢失第一条数据记录,建议先删掉。

完整修正代码

以下是包含读取、筛选、写入的完整可运行代码:

import csv 

# 读取CSV数据(移除多余的next())
videogames_liste = []
with open('vgsales.csv', 'rt', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file, delimiter=',')
    # 这里不需要next(csv_reader),因为DictReader已经自动将第一行作为表头
    for line in csv_reader:
        videogames_liste.append(line)

# 筛选2008年的记录
daten_2008 = []
for record in videogames_liste:
    # 注意:有些Year字段可能是空值,加个判断避免KeyError
    if record.get("Year") == "2008":
        daten_2008.append(record)

# 写入筛选后的CSV
if daten_2008:  # 先确认列表非空
    # 获取原CSV的表头字段
    fieldnames = csv_reader.fieldnames
    with open('daten_2008.csv', 'w', encoding='utf-8', newline='') as out_file:
        writer = csv.DictWriter(out_file, fieldnames=fieldnames)
        writer.writeheader()  # 写入一次表头
        writer.writerows(daten_2008)  # 批量写入所有记录
else:
    print("未找到2008年的游戏记录")

关键注意事项

  • 移除next(csv_reader):csv.DictReader会自动把文件的第一行解析为字段名,后续迭代器返回的都是数据行,调用next()会直接跳过第一条数据,造成数据丢失。
  • 正确设置fieldnames:必须传入原CSV的字段名(通过csv_reader.fieldnames获取),否则DictWriter无法匹配每条记录的键值对。
  • 调用writerows()而非重复调用writeheader():如果之前重复执行writeheader(),就会导致文件里只有重复的表头,没有数据。
  • 添加空值判断:原数据中可能存在Year字段为空的记录,用record.get("Year")可以避免触发KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:23:15