Python';和';使用CSV文件进行迭代

Python';和';使用CSV文件进行迭代,python,csv,iteration,Python,Csv,Iteration,我有一个包含以下数据的csv文件: Rectangle Green Large Rectangle Green Large Rectangle Green Small Rectangle Green Medium Rectangle Green Small Rectangle Blue Large Rectangle Blue Large Rectangle Blue Medium Rectangle Orange La

我有一个包含以下数据的csv文件:

Rectangle   Green   Large
Rectangle   Green   Large
Rectangle   Green   Small
Rectangle   Green   Medium
Rectangle   Green   Small
Rectangle   Blue    Large
Rectangle   Blue    Large
Rectangle   Blue    Medium
Rectangle   Orange  Large
Circle  Pink    Small
Circle  Pink    Small
Circle  Green   Large
Circle  Green   Large
我的Python代码如下所示:

import csv

with open("shapes.csv", 'rb') as csvfile:
    rowreader = csv.reader(csvfile, quotechar = '|')
    for row in rowreader:
        if 'Large' and 'Green' in row:
            print row
然而,我得到的结果是:

['Rectangle', 'Green', 'Large']
['Rectangle', 'Green', 'Large']
['Rectangle', 'Green', 'Small']
['Rectangle', 'Green', 'Medium']
['Rectangle', 'Green', 'Small']
['Circle', 'Green', 'Large']
['Circle', 'Green', 'Large']
我试图只显示行中绿色和大型的记录。其他一切都应该排除在外。我原以为“和”可以完成这项工作,但我似乎感到困惑,而且走错了方向

实现这一点的正确方法是什么?

应该是

if 'Large' in row and 'Green' in row:
被解释为“大”和(“行中的绿色”),这总是正确的

>>> ("Large" in row) and ("Green" in row)
如果您只有两个项目,这将非常简单。否则,我会使用

>>> set(["Large", "Green"]).issubset(set(row))

实际上,您正在这里测试两种不同的东西:

if ('Large' (== True)) and ('Green' in row):
执行'Large'==True始终为True,因为它是一个文本字符串,所以实际上您正在打印包含单词'Green'的所有行,因为另一半始终为True

if 'Large' in row and 'Green' in row:

我会做你想做的事

您可能需要更具体地说明在哪个列中查找什么值

例如:

if row[1] == 'Green' and row[2] == 'Large':
将确保在第二列中始终检查颜色,在第三列中始终检查大小。

的可能重复项
if row[1] == 'Green' and row[2] == 'Large':