0

I have the following code

if "[FAILED]" in line and (("Result:" not in line) or ("Date:" not in line)):
    print line

I'm reading a text file line by line. I want to look for anywhere in the text file "[FAILED] but it cant have "Result:" or "Date:" in the same line.

My code currently prints out the line even it has result or date in it.

Any help would be appreciated.

Thanks.

4

1 回答 1

1

您需要and括号中的条件。

布尔逻辑很棘手,如果经常通过示例来帮助您。考虑这一行:

FAILED blah blah Date: blah

因此,逐个检查您的条件:

  • Failed 在行中,所以让我们检查下一个条件。
  • “结果:”不在该行中,因此该部分为真。
  • 我们有一个 OR,我们已经有一个 True 结果,所以甚至不需要检查“Date:”是否在行中。
  • 所以 AND 的两边都是真的,所以整个事情都是真的。

显然,如果该行包含“结果:”但不包含“日期:”,则会发生完全相同的情况。

如果您在括号内有 AND,则需要检查“日期”是否不在该行中,“结果”是否不在该行中,而不是如果其中任何一个都不存在则感到高兴。

表达可能更清楚的条件的另一种方法是:

if "[FAILED]" in line and not (("Result:" in line) or ("Date:" in line)):
于 2013-09-26T09:47:31.947 回答