<p>让我们来看看这个代码:</p>
<pre><code>def averager(filename):
</code></pre>
<p><code>averager</code>作为一个名称并没有像它可能的那样清晰。例如,<code>averagecsv</code>怎么样?在</p>
^{pr2}$
<p><code>avg</code>名称不正确。这不是所有事情的平均值!是一堆台词。例如,将其称为<code>csvlines</code>。在</p>
<pre><code> f.close()
avgr=[]
</code></pre>
<p><code>avgr</code>名称不正确。它是什么?名字应该有意义,否则为什么要给他们?在</p>
<pre><code> final=""
x=0
i=0
while i < range(len(avg[0])):
while x < range(len(avg)):
</code></pre>
<p>如注释中所述,可以用for循环替换它们,如<code>for i in range(len(avg[0])):</code>。这样您就不必声明和增加有问题的变量。在</p>
<pre><code> avgr+=str((avg[x[i]]))
</code></pre>
<p>嗯?让我们把这条线拆开。在</p>
<p>名称不好的<code>avg</code>是csv文件中的行。在</p>
<p>所以,我们用x索引<code>avg</code>,好的,这将给我们一个行号<code>x</code>。但是。。。x[i]没有意义,因为x是一个整数,整数不支持数组访问。我想你想做的是。。。将文件拆分为行,然后将行拆分为列,因为它是csv。正确的?在</p>
<p>所以我们把代码扔了吧。使用split <a href="http://docs.python.org/2/library/stdtypes.html#str.split" rel="nofollow">http://docs.python.org/2/library/stdtypes.html#str.split</a>函数,您需要这样的结果:</p>
<pre><code>totalaverage = 0
for col in range(len(csvlines[0].split(","))):
average = 0
for row in range(len(csvlines)):
average += int(csvlines[row].split(",")[col])
totalaverage += average/len(csvlines)
return totalaverage
</code></pre>
<p><strong>但是等等!还有更多!</strong>Python有一个内置的csv解析器,它比使用<code>,</code>进行拆分更安全。看看这里:<a href="http://docs.python.org/2/library/csv.html" rel="nofollow">http://docs.python.org/2/library/csv.html</a></p>