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

时间:2016-03-11 09:40:14

标签: 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  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']

我试图只显示Green和Large在行中的记录。其他一切都应排除在外。我想'和'会完成这个,但看起来我很困惑,走向错误的方向。

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

4 个答案:

答案 0 :(得分:1)

应该是

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

答案 1 :(得分:1)

>>> "Large" and "Green" in row

被解释为"Large" and ("Green" in row),它始终为真。

>>> ("Large" in row) and ("Green" in row)
如果你只有两个项目,

会起作用并且很简单。否则,我会用

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

答案 2 :(得分:1)

你实际上在这里测试了两个不同的东西:

if ('Large' (== True)) and ('Green' in row):

做大' == True始终为true,因为它是一个文字字符串,因此您实际上打印的所有行包含单词' Green',因为另一半始终为true。

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

会做你想要的。

答案 3 :(得分:1)

您可能希望更具体地了解您在哪个列中寻找什么价值。

例如:

if row[1] == 'Green' and row[2] == 'Large':

将确保始终在第二列中检查颜色,并始终在第三列中检查尺寸。