2011-03-19 79 views
0

我正在读取.txt文件,每个人都有四个分数,我需要找出如何从每一行取得分数并找出每个人的平均分数。找出python中的平均值

s={} 
results= open("surf.txt") 
for line in results: 
    (s['Name'], s['scoreOne'], s['scoreTwo'], s['scoreThree'], s['scoreFour']) =line.split(";") 

这似乎是需要解决这个问题的所有代码。

surf.txt包含:

Johnny;8.65;7.32;7.81;9.12 
Juan;9.12;8.45;8.80;5.60 
Joseph;8.45;9.00;9.12;9.13 
Stacey;7.81;8.33;9.00;8.10 
(...) 
+0

第放e文本文件的内容“surf.txt”,以便我们可以看到格式。它真的只是每行都有四个数字的行吗? – Escualo 2011-03-19 22:03:44

+0

约翰尼; 8.65; 7.32; 7.81; 9.12 涓; 9.12; 8.45; 8.80; 5.60 约瑟夫; 8.45; 9.00; 9.12; 9.13 与Stacey; 7.81; 8.33; 9.00; 8.10 艾迪恩; 8.05; 7.55; 6.90; 8.25 Zack; 7.21; 6.80; 9.90; 8.20 Aaron; 8.31; 8.56; 8.34; 8.70 – N3aMarVal1a 2011-03-19 22:06:21

+0

每个都有自己的路线,我并不熟悉python的平均数我是第一学期的编程学生 – N3aMarVal1a 2011-03-19 22:07:51

回答

1

如果你的文件的格式如下:

john; 1; 2; 3; 4 
pete; 5; 4; 3; 2 
joan; 9; 8; 7; 6 

然后,你可以简单地说:

with open('surf.txt', 'rb') as fp: 
for line in fp.readlines(): 
    tokens = line.strip().split(';') # this creates a list of strings 
    name = tokens[0] # extract the first (left-most) string (the name) 
    nums = [float(k) for k in tokens[1:]] # convert strings to floats 
    mean = sum(nums)/len(nums) # compute the arithmetic mean 
    print "%s has a mean of %f" % (name, mean) # print the result 

注意,这个例子中是行不通的如果这个人有多个名字:它假定这个名字只有一列,剩下的只有一列可以将列转换为浮动。

+3

哇,一个空间的tabstop? – senderle 2011-03-19 23:09:59

1

可以切成与[1:]

for line in results: 
    scores = line.split(';')[1:] 
    scores = map(float, scores) # Conversion to float 
    average = sum(scores)/len(scores) 

结果列表也比较一般,因为你不会依赖于分数的数量,只是拒绝的第一个元素:)

+1

'分数=地图(lambda x:float(x),分数)'是一种复杂的方式来表示'scores = map(float,scores)'。 – 2011-03-19 22:18:06

+0

当然是了,谢谢:) – 2011-03-19 22:19:24

2

解决方案:

separator = ";" 
inputFile = "input.txt" 

with open(inputFile) as f: 
    for line in f: 
     values = line.split(separator) 
     name = values[0] 
     scores = map(float, values[1:]) 
     avg = sum(scores)/len(scores) 
     print name, avg 

输入:

Maciej;5;10;15;50 
John;15;8;10;14 
Mike;5;5;5;5 

输出:

Maciej 20.0 
John 11.75 
Mike 5.0 
0

文件cici.csv

Johnny;8.65; 7.32;7.81;9.12 
    Juan;9.12;8.45;8.80;5.60 ; 12.455 ; 2 
Joseph Maria y Borbon;8.45;9.00;9.12;9.13 
Stacey  ;7.81 ;8.10 

代码

import csv 

rid = csv.reader(open('cici.csv','rb'),delimiter=(';')) 
av = dict((row[0].strip(),sum(map(float,row[1:]))/(len(row)-1)) for row in rid) 
print av 

结果

{'Joseph Maria y Borbon': 8.925, 'Juan': 7.7375, 'Stacey': 7.955, 'Johnny': 8.225}