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

Python读取TSV文件计算学生成绩及平均分报错求助

问题分析与调试方案

1. 核心错误:KeyError: 0 的根源

csv.DictReader 会将每行TSV数据解析为字典,键是文件第一行的表头字段名,而非数字索引。你用row[0]这类数字索引访问字典,自然会因找不到对应键抛出KeyError: 0。

2. 其他常见问题修正

  • 变量未初始化:提前定义存储结果的容器(如列表、字符串),避免运行时出现“未定义变量”报错。
  • 拼写错误:严格检查表头字段名、变量名的拼写(比如把Midterm1写成Midterm,或输出文件名写错),字典的键对大小写、拼写完全敏感。

3. 修正后的完整代码示例

假设你的TSV表头为 Last Name、First Name、Midterm1、Midterm2、Final,以下是可运行的修正代码:

import csv

def generate_score_report(input_tsv, output_txt):
    # 初始化存储结果的列表
    report_content = []
    
    # 读取TSV文件,指定分隔符为制表符\t
    with open(input_tsv, 'r', newline='', encoding='utf-8') as tsv_file:
        # DictReader自动以第一行作为字典键
        reader = csv.DictReader(tsv_file, delimiter='\t')
        
        for row in reader:
            # 用表头字段名访问字典值,确保和表头拼写完全一致
            last_name = row['Last Name']
            first_name = row['First Name']
            mid1 = float(row['Midterm1'])
            mid2 = float(row['Midterm2'])
            final_score = float(row['Final'])
            
            # 计算成绩统计(可根据需求调整)
            total = mid1 + mid2 + final_score
            average = total / 3
            
            # 格式化单条学生记录
            student_line = f"姓名:{first_name} {last_name}\n" \
                          f"期中1:{mid1:.1f} | 期中2:{mid2:.1f} | 期末:{final_score:.1f}\n" \
                          f"总分:{total:.1f} | 平均分:{average:.1f}\n" \
                          "-------------------------\n"
            report_content.append(student_line)
    
    # 写入结果文件
    with open(output_txt, 'w', encoding='utf-8') as txt_file:
        txt_file.writelines(report_content)

# 替换为你的实际文件名
generate_score_report('students.tsv', 'score_report.txt')

4. TSV示例数据验证

假设你的TSV数据如下(注意用制表符分隔列):

Last Name First Name Midterm1 Midterm2 Final
Smith John 85 90 92
Doe Jane 78 82 88

运行代码后,score_report.txt会生成格式化的学生成绩记录。

5. 实用调试技巧

  • 打印reader.fieldnames,查看DictReader识别到的表头,确认字段名拼写、大小写完全匹配。
  • 循环中打印单条row,直观查看字典的键值对,确保要访问的字段确实存在。

内容的提问来源于stack exchange,提问作者H K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:27:23