1

私は、両方の条件を満たすCSVファイルの行を抽出したいと考えています。Python &&条件付きで動作しない

たとえば、特定のユニークコードと特定の日付を特徴とする行を抽出したいとします。

現在、私のコードは唯一のいずれかの条件を満たしている行抽出されます。ログに

ラインの

を:

with open("log.csv", 'a') as csvfile: 

    if ("code123" and "29/07/2016") in line: 
      print(line) 

私も

with open("log.csv", 'a') as csvfile: 

    if ("code123") and ("29/07/2016 ") in line: 
      print(line) 

を試みた。しかし、それはそうですその日付に一致する行は抽出しますが、一意のコードは抽出しません。

ログファイルの形式は、このようなビット:

code123、1001、14:01 29/07/2016、私は、スペースの後にせずに、コードを試してみた100

日付:Tと同じセル内に時間があるという事実包みなさい

if ("code123") and ("29/07/2016") in line: 

if ("code123") and ("29/07/2016 ") in line: 

彼は日付が問題です。

しかし、ちょうど日付に一致する行を抽出して、指定されたものではなく日付からの読み取り値を持つ一意のコードを出力するようです。

誰でも手伝いできますか?

私がこれをやろうとしているのは、ログファイルを日付と固有のIDに基づいて別々のファイルに分けることができるからです。ですから、特定のキーのある特定の日付からのすべての読みが1つのファイルに収まるようにします。

+1

[複数の値に対して1つの変数をテストするにはどうすればよいですか?](http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values) –

+0

どうして 'if(" code123 "in行)と(29/07/2016行):'? – galah92

+0

すべての場合、Pythonは 'if(" code123 ")== True'をチェックしています。' if( "code123")inline'ではなくです。 'if(" code123 "in line)と(" 29/07/2016 "in line):' – James

答えて

0

and戻りFalseまたは最後のオペランド、すなわち以来

if "code123" in line and "29/07/2016" in line: 

を試してみてください。

x and y == y # iff bool(x) is True and bool(y) is True 

この部分

("code123" and "29/07/2016") 

は常に "29/07/2016" と評価されて、あなたが理由

a and b in c == (a and b) in c 

なく

if "29/07/2016" in line: 

が残っています(a) and (b in c)は、演算子の優先順位のルールは:inandよりも優先順位が高いので、http://www.tutorialspoint.com/python/operators_precedence_example.htm

優先順位のルールも

a in c and b in c == (a in c) and (b in c) 

を担当しています。この場合、わかりやすくするために括弧を付ける方が良いかもしれません。

+2

'(" code123 "と" 29/07/2016 ")'は実際には '' 29/07/2016 ''であり、' True'ではありません。 –

+0

あなたはもちろんです。 – thebjorn

+0

解決策を教えてくれてありがとうが、私の初期のコードが正しくない理由を説明してくれてありがとう。 – user3421420

関連する問題