python过滤器csv行

时间:2016-12-19 00:35:53

标签: python-2.7 csv

我是一个csv文件。我试图通过2个变量检查​​每一行。

 csv:
 1,2
 1,3
 2,3
 3,2
 8,5

脚本:

 import csv
 a= 2
 b= 3

 with open('ondo.csv','r') as rows1:
 for row in rows1: 
         if (str(a) and str(b)) in row:
            print ('oops')
         else:
            print (row)

可生产

1,2

oops
oops
oops
8,5

2和3应该只能在2行中找到。什么是正确的过滤方式以及导致shell换行的原因。

1 个答案:

答案 0 :(得分:1)

[[NB:我假设for row in rows1:应该缩进另一个级别]]

问题是(str(a) and str(b))评估为'3',因此if (str(a) and str(b)) in row:if '3' in row:相同。
第一行(1, 2)不包含'3',因此会打印出来(包括它的附加换行符和免费打印的换行符)。最后一行(8, 5)也不包含'3',因此会打印出来。文件不以换行符结尾,或者您没有注意到输出结尾处的空白行。

你想要的条件是:

if str(a) in row and str(b) in row:

但这并不是最好的方法,因为对于其中包含True的行来说23(CSV模块是您的朋友)。也没有理由不将ab定义为'2''3',因为您只将它们用作字符串。