从带标题的CSV文件中查找行总和

时间:2019-04-05 13:28:06

标签: python

需要在用户输入游戏玩家ID时找到用户得分的平均值

csv文件:

  

名称部落ID Score1 Score2 Score3 Score4
    Aang Normad N321B 89 67 54 78

     

Gyatso Omaticay O111C 54 78 65 54

我尝试添加一些我在SO上找到的东西,但收到错误:int()的无效文字,基数为10:“ Score1”。将不胜感激的人,只要能向我指出正确的方向,就可以开始学习python。

import  csv
filePath="data.csv"


with open(filePath) as csvfile:
    avatar_id=  input ("Enter Avatar ID:")    
    reader = csv.DictReader(csvfile)  
    for row in reader:
        if avatar_id in row['id']:
        #just print some stuff
            user,tribe,id, *scores= row 
            average= sum([int(score) for score in scores])/4
              print("{0:>6}{1:>8}{2:>7}{3:>7}{4:^14}".format(row['Air'],row['Water'],row['Earth'],row['Fire'], average))
            print("==============================") 
        else:
            x=5
if x>4:
    print('No avatar found')

3 个答案:

答案 0 :(得分:0)

您的错误告诉您确切的问题是什么。您的代码正在尝试在以下行中将标题标签Score1转换为整数:

average= sum([int(score) for score in scores])/4

并且失败。为了避免在计算中包括标题标签,请测试reader.line_num以跳过文件的第一行。

或者,为了安全起见,只需忽略任何非数字数据:

if all(score.isdigit() for score in scores):
    average= sum([int(score) for score in scores])/4

答案 1 :(得分:0)

替换

*scores= row

使用

scores = row['Score1']+row['Score2']+row['Score3']+row['Score4']

答案 2 :(得分:0)

您需要为不存在的键添加额外的检查,并删除CSV文件中的空行。您还需要在csv.DictReader中添加定界符,因为它默认为逗号分隔符。参见下面的示例:

@Override
protected void onPause() {
    if (mediaPlayer != null) {
        mediaPlayer.pause();

    }
}

@Override
protected void onStop() {
    if (mediaPlayer != null) {
        mediaPlayer.pause();

    }
}