我是一个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换行的原因。
答案 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模块是您的朋友)。也没有理由不将a
和b
定义为'2'
和'3'
,因为您只将它们用作字符串。