python csv:获取子集

l--*_*''' 0 python csv

这是我的csv快照:

alex    123f    1
harry   fwef    2
alex    sef 3
alex    gsdf    4
alex    wf35    6
harry   sdfsdf  3
Run Code Online (Sandbox Code Playgroud)

我想得到这个数据的子集,其中第一列(哈里,亚力)中出现的任何东西至少为4.所以我希望得到的数据集是:

alex    123f    1
alex    sef 3
alex    gsdf    4
alex    wf35    6
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 5

很明显,在看到所有行之前,你无法确定哪些行是有趣的(因为最后一行可能是将一些计数从三变为四,从而使一些先前看到的行变得有趣,例如;-).因此,除非您的CSV文件非常庞大,否则请将其全部存入内存,首先,作为列表...:

import csv

with open('thefile.csv', 'rb') as f:
  data = list(csv.reader(f))
Run Code Online (Sandbox Code Playgroud)

然后,做计数 - Python 2.7有一个更好的方法,但假设你像我们大多数人一样仍然在2.6 ...:

import collections
counter = collections.defaultdict(int)
for row in data:
    counter[row[0]] += 1
Run Code Online (Sandbox Code Playgroud)

最后做选择循环......:

for row in data:
    if counter[row[0]] >= 4:
        print row
Run Code Online (Sandbox Code Playgroud)

当然,这会将每个有趣的行打印为一个粗略的列表(方括号和项目周围的引号),但很容易以您喜欢的任何方式格式化它.