2013-01-17 47 views
1

我希望能够在python中打开一个名为“numbers.txt”的文件,该文件应该包含用逗号分隔的数字。例如Python中的数字的平均值

1,2 
6,4,7 
4,5,6 

我想写计算每一行的平均值,然后一个函数返回它与每个平均值的列表:

例如,对于上面的函数的数字将返回:1.5 ,5.67,5]

def line_averages(filename): 
    f = open(filename, "r") 
    lines = f.readlines() 
    f.close 
    for line in lines: 
     b = line.split(",") 

这是我的代码到目前为止,但我不知道如何进一步。

+2

它是什么,你有一个问题特别** **? – NlightNFotis

+1

听起来很像功课... –

+4

小心:它是'f.close()',而不是'f.close'。 –

回答

3

使用CSV reader输入数据,然后一旦找到输入,计算平均值并根据需要输出。我只打算展示第一点,一些代码将打印出来,我会让你从那里弄清楚如何去做。这段代码是为python 2.x考虑的,只有打印应该改变为将其转换为python 3.x.

import csv 
filename='blah.csv' 
with open(filename, 'rb') as csvfile: 
    spamreader = csv.reader(csvfile) 
    for row in spamreader: 
      for value in row: 
      print value 

编辑:说完看着你有什么,你可以做如下改变:

def line_averages(filename): 
    f = open(filename, "r") 
    lines = f.readlines() 
    f.close() 
    for line in lines: 
     b = line.split(",") 
     for value in b: 
      print value 
+0

3,你还需要改变'open'('open(filename,newline ='')'等)。 – DSM

+0

比F3AR3DLEGEND的更优雅的解决方案,但是我会犹豫是否要向csv引入一个python新手特别是当他可以采取更新颖友好的方法时。 – NlightNFotis

+0

@NlightNFotis:我在写入该解决方案之前,他已经包含任何代码,因此我编辑显示他的代码的下一步,而不是使用csvreader。 – PearsonArtPhoto

1

你已经开了一个不错的开始,但尚未完成。 一个简单的方法(在我看来)来读取每一个文件的行线:

def line_averages(fileName): 
    line_avgs = [] 
    with open(fileName, 'r') as my_file: 
     for line in my_file: # this will read the file line by line 
      numbers = line.split(',') 
      total = 0 
      for num in numbers: 
       total += int(num) 
      my_avg = total/float(len(numbers)) # it must be a float so it returns a float 
      line_avgs.append(my_avg) 
    my_file.close() 
    return line_avgs 
+1

这看起来不对。 'num'是一个字符串,而你的'my_avg'和'line_avgs'这两行似乎缩进了太多。 (我自己会使用'sum'/genexp解决方案。) – DSM

+0

哇,没注意到。我正在写这个很快......修正了:P –

1

我想你失踪了后来的字符串转换为整数的方式。 之后,你只需要总结一个鸿沟,希望它有帮助。

def line_averages(filename): 
    averages = [] 
    with open(filename) as f: 
     for line in f.readlines(): 
      numbers = [int(x) for x in line.split(',')] 
      averages.append(sum(numbers)/float(len(numbers))) 
    return averages 
1

可能是这一个会很难理解;但它会给你更多的洞察力。
文本文件:

1,2 
6,4,7 
4,5,6 
4,9,9,9 

平均每行:::

In [177]: from __future__ import division 

In [178]: f=open('test.txt',"r") 

In [179]: [reduce(lambda x,y:(float(x)+float(y)), a.split(','))/len(a.split(',')) for a in f.readlines()] 
Out[179]: [1.5, 5.666666666666667, 5.0, 7.75] 

In [180]: f.close()