2015-04-05 2 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 

Я пытаюсь создать функцию, которая принимает этот файл и возвращает:

  • среднего значение всех сортов (последние номера в файле каждой строки),
  • и идентификатор (длинные номера в файле) наивысшего и младшего разрядов.

Я знаю, как получить среднее значение, но я застреваю, пытаясь получить идентификаторы.

Пока мой код выглядит следующим образом:

#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') в файле, вы получите индекс исключение –

+0

Как бы вы определить max или min, просмотрев файл (не используя компьютер)? –

+0

не используете компьютер? просто взглянув на нее и захватив самую низкую и самую высокую ценность. – stacker

ответ

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']] 

Тогда для расчета среднего вы можете использовать zip в map и sum функции:

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

и min и max использовать built-in functionsmin и max с соответствующим ключом:

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

функции max и min перевернуты;) 820000095> 820000000. Я думаю, что ключ будет 0, а не 1: 'max (l, key = itemgetter (0))' –

+0

@ LoïcG. его просто ID! – Kasramvd

+0

Извините, я неправильно понял, и я взял идентификатор для оценки. BTW, хороший фрагмент;) –

Смежные вопросы