<p>下面的代码可以正确地处理不同的计数,还可以检测额外的数据。。。换句话说,它相当健壮。如果文件是空的(2)如果头行是空的,可以通过显式消息(1)来改进它。另一种可能是显式地测试<code>"NA"</code>,如果某个字段既不是<code>"NA"</code>,也不是可浮动的,则发出错误消息。在</p>
<pre><code>>>> import sys, StringIO
>>>
>>> data = """\
... Jim Joe Billy Bob
... 1 2 3 x
... 2 x x x 666
...
... 3 4 5 x
... """
>>>
>>> def get_averages(f):
... headers = f.readline().split()
... ncols = len(headers)
... sumx0 = [0] * ncols
... sumx1 = [0.0] * ncols
... lino = 1
... for line in f:
... lino += 1
... values = line.split()
... for colindex, x in enumerate(values):
... if colindex >= ncols:
... print >> sys.stderr, "Extra data %r in row %d, column %d" %
(x, lino, colindex+1)
... continue
... try:
... value = float(x)
... except ValueError:
... continue
... sumx0[colindex] += 1
... sumx1[colindex] += value
... print headers
... print sumx1
... print sumx0
... averages = [
... total / count if count else None
... for total, count in zip(sumx1, sumx0)
... ]
... print averages
</code></pre>
<p><strong>编辑</strong>在此处添加:</p>
^{pr2}$
<p><strong>编辑</strong></p>
<p>正常使用:</p>
<pre><code>with open('myfile.text') as mf:
hdrs, avgs = get_averages(mf)
</code></pre>