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