1

Я ищу, чтобы извлечь строки CSV-файла, соответствующие условиям BOTH.Python && And Conditional Not Working

Например, я хочу извлечь строку с уникальным кодом и конкретной датой.

В настоящее время мой код только добывающие линии, которые отвечают одному из условий:

для строки в журнале:

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, 29/07/2016 14:01, 100

Я пробовал код с и без пробела после дата:

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

и

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

Incase тот факт, что есть время, в той же клетке, т он является проблемой.

Но похоже, что они извлекают строки, которые соответствуют только дате (и распечатывают любой уникальный код, который имеет чтение с даты, а не указанный).

Может ли кто-нибудь помочь?

Причина, по которой я пытаюсь это сделать, заключается в том, что я могу разделить файл журнала на отдельные файлы на основе дат и уникальных идентификаторов. Поэтому я хочу, чтобы все показания с определенной даты, чтобы определенный ключ находился в одном файле.

+1

Возможный дубликат [Как проверить одну переменную на несколько значений?] (Http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values) –

+0

Почему бы не просто «if (« code123 »в строке) и (29/07/2016 в строке):'? – galah92

+0

во всех случаях, которые вы использовали, python проверяет 'if (« code123 ») == True', а не' if («code123») в строке'. Используйте 'if (« code123 »в строке) и (« 29/07/2016 »в строке):' – James

ответ

0

попробовать

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

С and возвращается False или последнего операнда, то есть.

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

эта часть

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

всегда имеет значение "29/07/2016" и вы остаетесь с

if "29/07/2016" in line: 

Причина

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

и не (a) and (b in c), обусловлено правила оператора предшествования: http://www.tutorialspoint.com/python/operators_precedence_example.htm

Правила приоритета также отвечают за

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

поскольку in имеет более высокий приоритет, чем and.Возможно, было бы лучше добавить скобки для ясности в этом случае.

+2

'(" code123 "и" 29/07/2016 ")' фактически '" 29/07/2016 "', а не 'True'. –

+0

Вы правы, конечно. – thebjorn

+0

Большое спасибо за то, что вы дали решение, но также объяснили причину, почему мой первоначальный код был неправильным. – user3421420