python文件中数字的平均值

python文件中数字的平均值,python,file,csv,average,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

我希望能够在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(",")
到目前为止,这是我的代码,但我不知道如何进一步处理。

使用a输入数据,然后在找到输入后,计算平均值并按需要输出。我将只展示第一部分,以及一些将打印出行的代码,我将让您从中了解如何做。这段代码是针对Python2.x的,只有打印内容需要更改才能将其转换为Python3.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
使用a输入数据,然后在找到输入后,计算平均值并以您想要的方式输出。我将只展示第一部分,以及一些将打印出行的代码,我将让您从中了解如何做。这段代码是针对Python2.x的,只有打印内容需要更改才能将其转换为Python3.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

你有了一个好的开始,但还没有结束。 在我看来,每行读取一行文件的一种更简单的方法是:

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

你有了一个好的开始,但还没有结束。 在我看来,每行读取一行文件的一种更简单的方法是:

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

我猜您缺少的是将字符串转换为整数的方法。 在那之后,你只需要求和一个除法,希望它有帮助

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

我猜您缺少的是将字符串转换为整数的方法。 在那之后,你只需要求和一个除法,希望它有帮助

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

也许这一点很难理解;但它会给你更多的洞察力。
文本文件:

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

你有什么特别的问题?听起来很像家庭作业…小心:它是
f.close()
,而不是
f.close
。你有什么特别的问题?听起来很像家庭作业…小心:它是
f.close()
,而不是
f.close
,您还需要将
open
open(filename,newline='')
或诸如此类)更改为比F3AR3DLEGEND更优雅的解决方案,但是我会犹豫是否将python新手引入csv,尤其是当他可以采取一种更为新手友好的方法时。@NlightNFotis:我在他包含任何代码之前就编写了该解决方案,因此,我的编辑将显示他的代码的下一步,而不是使用csvreader。@PearsonArtPhoto噢,对不起,伙计,我不知道我错过了。我的目光落在了
csv
:第3针,您还需要更改
open
open(filename,newline='')
或诸如此类)比F3AR3DLEGEND更优雅的解决方案,但是我会犹豫是否将python新手引入csv,尤其是当他可以采取一种对新手更友好的方法时。@NlightNFotis:我在他包含任何代码之前就编写了这个解决方案,因此我的编辑将显示他的代码的下一步,而不是使用csvreader。@Pearsonatphoto哦,对不起,伙计,我不知道我错过了这个。我的目光落在csv上:p这似乎不对
num
是一个字符串,您的
my\u avg
line\u avgs
行似乎缩进得太远。(我自己会使用
sum
/genexp解决方案。)哦,哇,我没注意到。我写得很快。。。修正:这似乎不正确
num
是一个字符串,您的
my\u avg
line\u avgs
行似乎缩进得太远。(我自己会使用
sum
/genexp解决方案。)哦,哇,我没注意到。我写得很快。。。修正:P