Python-如何对文件中的值求和

Python-如何对文件中的值求和,python,list,file,Python,List,File,所以我有一个文件。其中有3行,每行显示名称;运动:积分 Kevin;Football:604,196,47;Golf:349,0,0;Tennis:797,426,124 Julia;Football:350,254,1;Golf:242,58,38 Bob;Football:260,18,0 我有一个代码,但我不知道如何计算每项运动的分数 f=open("points.txt", "r") s=f.readlines() p=str(s) for line in s: printn

所以我有一个文件。其中有3行,每行显示名称;运动:积分

Kevin;Football:604,196,47;Golf:349,0,0;Tennis:797,426,124
Julia;Football:350,254,1;Golf:242,58,38
Bob;Football:260,18,0
我有一个代码,但我不知道如何计算每项运动的分数

f=open("points.txt", "r")
s=f.readlines()
p=str(s)

for line in s:
    printnum=0
    printnum+=float(line)



    for line in s:
        if p.isdigit():
            total=0
            for number in s:
                total+=int(number)
                print(total)
所以结果应该是这样的

Alvin:
- Football: 278
Kevin:
- Football: 847
- Golf: 349
- Tennis: 1347
Sam:
- Football: 605
- Golf: 338

因此,基本上我不知道热键和值

如何使用CSV模块:

import csv

points = {}

with open('points.txt', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        points[row[0]] = {}
        for sport in row[1:]:
            name = sport[:sport.find(':')] # get the name of the sport
            scores = sport[sport.find(':')+1:].split(',')
            total_score = 0
            for score in scores:
                total_score = int(score) # add all the scores together
            points[row[0]][name] = total_score
print(points)

# Print the resuslts in the order that you want
for name, sports in sorted(points.items()):
    print(name + ':')
    for sport_name, points in sorted(sports.items()):
        print('-', sport_name + ':', + points)
这给了我们:

Bob:
- Football: 0
Julia:
- Football: 1
- Golf: 38
Kevin:
- Football: 47
- Golf: 0
- Tennis: 124

这将生成描述玩家的口述记录列表

player_list = []

with open("dane") as f_obj:
    for line in f_obj.readlines():
        player_line = line.split(';')
        player_data = {'name': player_line[0]}

        for elem in player_line[1:]:
            sport = elem.split(':')
            sport_name = sport[0]
            points = sport[1].split(',')
            sum_points = 0
            for p in points:
                sum_points += int(p)

            player_data[sport_name] = sum_points

        player_list.append(player_data)

print(player_list)
现在,您只需按照自己的意愿格式化此列表的打印

以下是此列表的外观:

[{'name': 'Kevin', 'Golf': 349, 'Football': 847, 'Tennis': 1347}, {'name': 'Julia', 'Golf': 338, 'Football': 605}, {'name': 'Bob', 'Football': 278}]

请使输入和所需输出匹配。
from ast import literal_eval as leval

my_dict = {}
for line in s:
    name, *sports = line.split(';')
    my_dict[name] = {sport.split(':')[0]: sum(leval(sport.split(':')[1])) for sport in sports}

for player in my_dict:
    print('{}:'.format(player))
    for sport in my_dict[player]:
        print(' - {}: {}'.format(sport, my_dict[player][sport]))

# Produces:
# Kevin:
#  - Golf: 349
#  - Tennis: 1347
#  - Football: 847
# Julia:
#  - Golf: 338
#  - Football: 605
# Bob:
#  - Football: 278