文件python中的平均数

时间:2013-01-17 18:07:04

标签: python file csv average

我希望能够在python中打开一个文件说“numbers.txt”,该文件应该包含用逗号分隔的数字。 e.g。

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(",")

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

4 个答案:

答案 0 :(得分:3)

使用CSV reader输入数据,然后找到输入后,计算平均值并根据需要输出。我只会显示第一位,并且会打印出一些代码,我会告诉你如何做到这一点。这段代码是python 2.x的因素,只有print才能更改为将其转换为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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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()