0

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

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

4 回答 4

3

使用CSV 阅读器输入数据,然后在找到输入后,计算平均值并根据需要输出。我只会展示第一部分,以及一些会打印出这些行的代码,我会让你从那里弄清楚如何做到这一点。此代码适用于 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
于 2013-01-17T18:11:01.057 回答
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
于 2013-01-17T18:18:20.633 回答
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
于 2013-01-17T18:38:59.857 回答
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()
于 2013-01-17T19:17:16.050 回答