2016-12-19 5 views
0

Ive a csvファイル。私は2つの変数で各行をチェックしようとしています。python filter csv row

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行に見出すことになっています。フィルタリングする正しい方法とシェルの改行の原因

答えて

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'も含まれていないため、印刷されています。ファイルが改行で終わらないか、または出力の最後に空白行がないことに気付きました。

あなたが望む条件は以下のとおりです(CSVモジュールは、ここにあなたの友達です)

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

が、それはそれで23を持っているラインのTrueになるので、それは、実際にこれを行うための最善の方法ではありません。 ab'2''3'と定義しない理由は、文字列としてのみ使用するためです。