我有一个包含以下数据的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在行中的记录。其他一切都应排除在外。我想'和'会完成这个,但看起来我很困惑,走向错误的方向。
实现这个的正确方法是什么?
答案 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':
将确保始终在第二列中检查颜色,并始终在第三列中检查尺寸。