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

csv.DictReader仅读取CSV文件第一行问题排查求助

问题分析与修复方案

嘿,我帮你找出问题所在了!你的代码里有两个关键细节没处理好,导致最后要么只能拿到最后一行数据,要么解析逻辑有隐患:

1. 变量赋值错误导致数据被覆盖

你把stockPxData定义成了一个空字典,然后在循环里写了stockPxData = row——这就意味着每遍历一行,你都会把之前存储的内容完全替换成当前行的字典。循环结束后,stockPxData自然只会保留最后一行的数据,而不是所有行的集合。

2. 定义了fieldnames但未传给DictReader

虽然这不一定直接导致“只返回第一行”的问题,但如果你的CSV文件表头和你定义的fieldnames不匹配,DictReader会解析出不符合预期的键(甚至可能把表头行当成数据行处理)。如果你的CSV文件第一行就是你指定的这些表头,要么显式把fieldnames传给DictReader,要么让它自动读取第一行作为表头,这样更稳妥。


修正后的代码示例(推荐版本)

如果你的CSV文件第一行已经是Time,Open,High,Low,Last,Change,Volume这些表头,可以直接用下面的代码,简洁又准确:

import csv
with open('aapl_price-history-01-09-2019.csv') as csvfile:
    # 自动读取CSV第一行作为表头
    stockPxReader = csv.DictReader(csvfile)
    # 直接把reader对象转换成列表,一次性存储所有行数据
    stockPxData = list(stockPxReader)
    
    # 遍历打印每一行
    for row in stockPxData:
        print(row)

# 后续可以直接使用stockPxData操作所有数据

如果你需要强制使用自定义的fieldnames

如果CSV文件没有表头,或者你想忽略原表头用自己定义的字段名,就把fieldnames传给DictReader:

import csv
with open('aapl_price-history-01-09-2019.csv') as csvfile:
    fieldnames = ['Time', 'Open', 'High', 'Low', 'Last', 'Change', 'Volume']
    stockPxReader = csv.DictReader(csvfile, fieldnames=fieldnames)
    stockPxData = []
    for row in stockPxReader:
        stockPxData.append(row)
        print(row)

这样修改后,stockPxData就会存储CSV里的所有行数据,而不是只保留最后一行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:49:48