Python 在csv文件中搜索列中的特定项目

Python 在csv文件中搜索列中的特定项目,python,csv,Python,Csv,我正在尝试创建一个循环,在csv文件中搜索具有公共第3列和第4列的行,并对它们执行操作。 我拥有的文件如下所示: name1,x,y,z,notes name2,a,b,c,notes name3,a,y,z,notes 我使用的代码读取第一行,识别第[2]行和第[3]行,并在文件中的所有行中搜索该列组合。不幸的是,我似乎不知道如何实际搜索它们 for row in csvfile: row_identify = row[2:3] for row in csvfile:

我正在尝试创建一个循环,在csv文件中搜索具有公共第3列和第4列的行,并对它们执行操作。
我拥有的文件如下所示:

name1,x,y,z,notes
name2,a,b,c,notes
name3,a,y,z,notes
我使用的代码读取第一行,识别第[2]行和第[3]行,并在文件中的所有行中搜索该列组合。不幸的是,我似乎不知道如何实际搜索它们

for row in csvfile:
    row_identify = row[2:3]
    for row in csvfile:
        if row_identify in row:
            print row
        else:
            print "not here"
我希望它打印第一行和第三行(因为y和z将是第_行)。我假设我可以明确地声明我想搜索那些行,但这似乎不起作用。我也试过使用

row_identify =  str(row[2]),str(row[3])

但这似乎也不起作用。

您可以创建一个成对字典,其中键是包含标识列的元组,值是类似行的列表:

>>> import collections
>>> similarities = collections.defaultdict(list)

>>> for row in csvfile:
...     similarities[(row[2], row[3])].append(row)

>>> print similarities 
{('y', 'z'): [['name1', 'x', 'y', 'z', 'notes'], 
              ['name3', 'a', 'y', 'z', 'notes']], 
 ('b', 'c'): [['name2', 'a', 'b', 'c', 'notes']]
}

如果要标识与第一行具有相同第3列和第4列的行:

import csv
import operator

key = operator.itemgetter(2,3)
with open('path/to/input') as infile:
    rows = csv.reader(infile)
    holyGrail = key(next(rows))
    for row in rows:
        if key(row) != holyGrail:
            continue
        do_stuff(row)
如果您想要一个更通用的版本,将共享类似第3列和第4列的所有行聚集在一起,然后:

import csv
import operator
from collections import defaultdict as dd

key = operator.itemgetter(2,3)
info = operator.itemgetter(0,1)
similarities = dd(list)
with open('path/to/input') as infile:
    for i,row in enumerate(csv.reader(infile)):
        similarities[key(row)].append((i,info(row)))

for k, rows in similarities.items():
    print("These following rows all have the id <{}> (the data follows):".format(k), ', '.join([str(i) for i,_ in rows]))
    print('\n'.join(['\t' + '\t'.join([row]) for _,row in rows])
导入csv
进口经营者
从集合导入defaultdict作为dd
key=operator.itemgetter(2,3)
info=operator.itemgetter(0,1)
相似性=dd(列表)
以open('path/to/input')作为填充:
对于i,枚举(csv.reader(infle))中的行:
相似性[键(行)]。追加((i,信息(行)))
对于k,相似性中的行。items():
print(“以下这些行都有id(数据如下):”.format(k),“,”.join([str(i)for i,u.in rows]))
打印('\n'.join(['\t'+'\t'.join([row])for u,row in rows])

您到底想做什么?这个csvfile有多大?