2015-09-21 2 views
1

Так у меня есть текстовый файл с несколькими линиями Каждая линия имеет имя, класс и год рождения или студент, разделенный пол двоеточиеРазделить список, который находится в файл

Как сделать функцию так, чтобы он суммирует все пункты в каждой строке, а затем усредняет их?

, например,

mary; 0; 1995 
jay; 50; 1995 

classAverage = 25 

Действительно путать с этим.

Вот мой код до сих пор, она не дает мне ошибки, но когда я печатаю это говорит <function classAverage at 0x0000000004C1ADD8>

from kiva.constants import LINES 

def process(name): 
    f = open(name) 
    answer = [] 
    for line in f: 
     answer.append(line.strip()) 
    return answer 
def classAverage(data): 
    data = process(filename) 
    data.split() 
    adding = [] 
    for line in data: 
     adding = adding + data[1] 
    return adding/(line) 


if __name__ == '__main__': 
    filename = "grades.txt" 
    data = process(filename) 
    for each in data: 
     print each 
    print classAverage(data) 
    #print "Average grade is ", classAverage(data) 
    year1 = 1995 
    year2 = 1997 
    print "Number born from ",year1,"to",year2,"is", 
    #print howManyInRange(data, year1, year2) 

ответ

1
def ave(x): 
    return sum(x)/len(x) 
with open(name, newline='') as csvfile: 
    print(ave([float(row[1]) for row in csv.reader(csvfile, dilimeter=';')])) 
0

Я получаю сообщение об ошибке, когда я запускаю этот код, но вы получите это выход, если у вас был «printAlice» вместо «print classAverage (data)», так что, возможно, вы скопировали несколько другую версию, чем то, что произвело этот вывод.

У вас есть несколько проблем с кодом. Во-первых, данные - это список, и вы пытаетесь вызвать data.split(). Вы также никогда не разделяете текст на ";" и ваша средняя формула выключена. Я сделал некоторые незначительные коррективы, чтобы заставить его делать то, что я думаю, что вы собираетесь:

def process(name): 
f = open(name) 
answer = [] 
for line in f: 
    answer.append(line.strip().split(';')) 
return answer 


def classAverage(data): 
    adding = 0.0 
    for line in data: 
     adding = adding + float(line[1]) 
    return adding/len(data) 


if __name__ == '__main__': 
    filename = "grades.txt" 
    data = process(filename) 
    for each in data: 
     print each 
    print classAverage(data) 
    # print "Average grade is ", classAverage(data) 
    year1 = 1995 
    year2 = 1997 
    print "Number born from ", year1, "to", year2, "is", 
    # print howManyInRange(data, year1, year2) 

Тем не менее, панды действительно хорошо разбора файлов данных, а затем вычисления метрик на данных. Разбор файла представляет собой одну строку с использованием панд. Вот эквивалентный код с помощью панд:

import pandas as pd 


if __name__ == '__main__': 
    df = pd.read_table('grades.txt', sep=';', names=['name', 'score', 'year']) 
    print 'Average score = ', df.score.mean() 
    year1 = 1995 
    year2 = 1997 
    print "Number born from ", year1, "to", year2, "is", df[(df.year >= year1) & (df.year <= year2)].name.count() 

Выход:

Average score = 25.0 
Number born from 1995 to 1997 is 2 
0

вы должны изменить функцию classAverage так:

def classAverage(data): 
    # you do not need to re-process the file, just use the data 
    adding = [] 
    for line in data: 
     line = line.split(';') 
     adding.append(float(line[1].strip())) 
    return sum(adding)/len(adding) 
Смежные вопросы