使用Python对CSV文件Profit/Losses列求和却返回0的问题排查
问题定位
- 求和结果为0的核心原因是表头跳过语句的调用对象错误
- 原代码使用
next(csvfile, None)跳过表头,但操作的是原始打开的文件对象,而非csvreader的行迭代实例 - 返回0的具体逻辑链:
- Python的csv模块自带预读缓冲区机制,不会严格按照原始文件指针的位置逐行同步读取
- 直接对原始文件对象调用
next(),会和csvreader内部维护的行读取位置完全错位,最终导致csvreader迭代时拿不到任何有效数据行 sum()函数对空迭代器的默认返回值就是0,和你观测到的现象完全匹配
修正方法
将跳过表头的语句改为对csvreader实例调用next,让csvreader自身完成首行跳过,再逐行读取数据计算:
import os import csv # Path to collect data from the csv file in the Resources folder pybank_csv = os.path.join("resources", "budget_data.csv") with open(pybank_csv, 'r') as csvfile: csvreader = csv.reader(csvfile, delimiter=',') # 修正点:将next()的参数从csvfile改为csvreader next(csvreader, None) t = sum(float(row[1]) for row in csvreader) print(f"Total: {t}")
验证结果
使用你提供的样例数据计算,修正后Profit/Losses列的总求和值为4360090,不会再出现0的错误结果。
内容的提问来源于stack exchange,提问作者Thomas M
相关产品推荐
相关产品推荐

