python csv:获取子集
这是我CSV文件的一部分:
alex 123f 1
harry fwef 2
alex sef 3
alex gsdf 4
alex wf35 6
harry sdfsdf 3
我想要从这些数据中找出第一列(比如harry和alex)出现次数至少为4的那些数据。所以我希望得到的结果是:
alex 123f 1
alex sef 3
alex gsdf 4
alex wf35 6
2 个回答
1
如果Python不是必须的
$ gawk '{b[$1]++;c[++d,$1]=$0}END{for(i in b){if(b[i]>=4){for(j=1;j<=d;j++){print c[j,i]}}}}' file
而且,70MB的文件是可以的。
5
很明显,在你看到所有行之前,无法决定哪些行是有趣的(因为最后一行可能会把某个计数从三变成四,从而让之前看到的某些行变得有趣,比如说;-)。所以,除非你的CSV文件大得惊人,否则先把它全部加载到内存中,作为一个列表……:
import csv
with open('thefile.csv', 'rb') as f:
data = list(csv.reader(f))
然后,进行计数——Python 2.7有更好的方法,但假设你和我们大多数人一样,还是在用2.6……:
import collections
counter = collections.defaultdict(int)
for row in data:
counter[row[0]] += 1
最后进行选择循环……:
for row in data:
if counter[row[0]] >= 4:
print row
当然,这样会把每一行有趣的内容打印出来,格式大概是一个粗糙的列表(里面有方括号和引号),不过你可以很容易地把它格式化成你喜欢的任何样子。