今天在CU上无间看到一个帖子。

http://bbs.chinaunix.net/thread-3662056-1-1.html

需求如下

ci    pi       er          cc     22         ii
2     3        5           1       2         4
2     4        5           5       1         4
5     6        6           5       6         7
7     7        5           4       3         1

对文本的指定列求和求平均。

自己想一下,理了一下思路。发现和其他网友有一些不一样的东西。

 

 
  
  1. #/usr/bin/env python 
  2. ''' 
  3. USAGE: 
  4.         colsum.py filename colname 
  5. ''' 
  6. import sys 
  7.  
  8. def colSum(filename,colname): 
  9.         data=[] 
  10.         index=open(filename).readline().split().index(colname) 
  11.         for line in open(filename): 
  12.                 data.append(line.split()[index]) 
  13.         total=sum([int(i) for i in data[1:]]) 
  14.         avg=total/(len(data)-1) 
  15.         #return total,avg 
  16.         print "file '%s',col '%s':total is %s,avg is %s" % (filename,colname,total,avg) 
  17.  
  18. def main(): 
  19.         filename=sys.argv[1] 
  20.         colname=sys.argv[2] 
  21.         try: 
  22.                 f=open(filename) 
  23.         except IOError: 
  24.                 print "%s not found" % filename 
  25.         else: 
  26.                 colSum(filename,colname) 
  27.                 f.close() 
  28.  
  29. if __name__=='__main__': 
  30.         if len(sys.argv)==3: 
  31.                 main() 
  32.         else: 
  33.                 print __doc__ 

总结:

1、拆分,通过对象求索引

2、文件迭代

3、列表解析

看了其他网友使用for循环和while,考虑到性能问题和过于复杂使用了列表解析

4、思路

通过索引将矩阵中需要的数据抓取出来重组成列表求和,求平均。
5、其他工具

MS使用awk,更简单!!!