2015-04-05 109 views
1

我有一个文件,Testing.txt返回.txt文件内容

type,stan,820000000,92 

paul,tanner,820000095,54 

remmy,gono,820000046,68 

bono,Jose,820000023,73 

simple,rem,820000037,71 

我试图创建一个函数,这个文件并返回:

  • 所有评分的平均值(每行文件中的最后数字),
  • 和最高和最低等级的ID(文件中的长数字)。

我知道如何获得平均值,但我试图获取ID。

到目前为止,我的代码如下所示:

#Function: 

def avg_file(filename): 

    with open(filename, 'r') as f: 
     data = [int(line.split()[2]) for line in f] 
     return sum(data)/len(data) 


    avg = avg_file(filename) 

    return avg 


#main program: 

import q3_function 

filename = "testing.txt" 

average = q3_function.avg_file(filename) 

print (average) 
+0

如果您在文件中有空白行(只'\ N'),您将获得指数异常 – 2015-04-05 19:11:54

+0

你将如何确定最大或最小通过查看文件(不使用计算机)? – 2015-04-05 19:12:50

+0

不使用电脑?只是看着它,抓住最低和最高价值。 – stacker 2015-04-05 19:17:19

回答

2

您可以使用列表理解来获得ID的愿望对和得分:

>>>l= [i.split(',')[-2:] for i in open(filename, 'r') if not i=='\n'] 
[['820000000', '92'], ['820000095', '54'], ['820000046', '68'], ['820000023', '73'], ['820000037', '71']] 

然后进行计算,平均可以内mapsum功能使用zip

>>> avg=sum(map(int,zip(*l)[1]))/len(l) 
>>> avg 
71 

并为minmax使用built-in functionsminmax用正确的密钥:

max_id=max(l,key=itemgetter(1))[0] 
min_id=min(l,key=itemgetter(1))[0] 

演示:

>>> from operator import itemgetter 
>>> max(l,key=itemgetter(1)) 
['820000000', '92'] 
>>> max(l,key=itemgetter(1))[0] 
'820000000' 
>>> min(l,key=itemgetter(1))[0] 
'820000095' 
>>> min(l,key=itemgetter(1)) 
['820000095', '54'] 
>>> min(l,key=itemgetter(1))[0] 
'820000095' 
+0

最大和最小函数是反转的;)820000095> 820000000.我认为这个键是0,而不是1:'max(l,key = itemgetter(0))' – 2015-04-05 19:21:18

+0

@LoïcG。它只是我的ID! – Kasramvd 2015-04-05 19:25:01

+0

哦,对不起,我误解了,我拿了ID作为成绩。顺便说一句,好的片段;) – 2015-04-05 19:27:50