def averager(filename):
f=open(filename, "r")
avg=f.readlines()
f.close()
avgr=[]
final=""
x=0
i=0
while i < range(len(avg[0])):
while x < range(len(avg)):
avgr+=str((avg[x[i]]))
x+=1
final+=str((sum(avgr)/(len(avgr))))
clear(avgr)
i+=1
return final
我得到的错误是:
^{pr2}$
其他人已经指出了你错误的根本原因。以下是编写方法的另一种方法:
让我们来看看这个代码:
^{pr2}$averager
作为一个名称并没有像它可能的那样清晰。例如,averagecsv
怎么样?在avg
名称不正确。这不是所有事情的平均值!是一堆台词。例如,将其称为csvlines
。在avgr
名称不正确。它是什么?名字应该有意义,否则为什么要给他们?在如注释中所述,可以用for循环替换它们,如
for i in range(len(avg[0])):
。这样您就不必声明和增加有问题的变量。在嗯?让我们把这条线拆开。在
名称不好的
avg
是csv文件中的行。在所以,我们用x索引
avg
,好的,这将给我们一个行号x
。但是。。。x[i]没有意义,因为x是一个整数,整数不支持数组访问。我想你想做的是。。。将文件拆分为行,然后将行拆分为列,因为它是csv。正确的?在所以我们把代码扔了吧。使用split http://docs.python.org/2/library/stdtypes.html#str.split函数,您需要这样的结果:
但是等等!还有更多!Python有一个内置的csv解析器,它比使用
,
进行拆分更安全。看看这里:http://docs.python.org/2/library/csv.htmlx
只是一个整数,因此无法对其编制索引。在所以,这个:
永远都不会有用。这就是错误所抱怨的。在
更新
既然您询问了如何简化代码的建议(在下面的注释中),下面是:
假设您的CSV文件类似于:
^{pr2}$您可以这样读取文件:
注意,我使用了
.split('\n')
。这会导致文件的内容存储在file_lines
中,同时也是文件中的行列表。在因此,假设您希望对第
i
列进行求和,这很容易通过理解来完成:因此,要求出所有的平均值,你可以将总和除以行数:
相关问题 更多 >
编程相关推荐