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

