今天在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对文本的指定列求和求平均。
自己想一下,理了一下思路。发现和其他网友有一些不一样的东西。
- #/usr/bin/env python
- '''
- USAGE:
- colsum.py filename colname
- '''
- import sys
- def colSum(filename,colname):
- data=[]
- index=open(filename).readline().split().index(colname)
- for line in open(filename):
- data.append(line.split()[index])
- total=sum([int(i) for i in data[1:]])
- avg=total/(len(data)-1)
- #return total,avg
- print "file '%s',col '%s':total is %s,avg is %s" % (filename,colname,total,avg)
- def main():
- filename=sys.argv[1]
- colname=sys.argv[2]
- try:
- f=open(filename)
- except IOError:
- print "%s not found" % filename
- else:
- colSum(filename,colname)
- f.close()
- if __name__=='__main__':
- if len(sys.argv)==3:
- main()
- else:
- print __doc__
总结:
1、拆分,通过对象求索引
2、文件迭代
3、列表解析
看了其他网友使用for循环和while,考虑到性能问题和过于复杂使用了列表解析
4、思路
通过索引将矩阵中需要的数据抓取出来重组成列表求和,求平均。
5、其他工具MS使用awk,更简单!!!