在python

时间:2016-06-15 14:59:55

标签: python

我正在尝试使用python逐行搜索日志文件。 我想捕获包含两个字符串"apple" and "banana"的行。

有些行只包含"apple",有些行只包含"banana"。如何检查该行是否包含两个字符串,然后进入下一个条件?

以下是我现在正在做的事情,现在还没有。

APPLE = "APPLE"
FAILURE_MSGS {
    APPLE: "apple"
}

for line in out.splitlines():
    if FAILURE_MSGS[APPLE] and "banana" in line:
        <do something special with this line>

需要注意的是,您可能会注意到,"apple"是从其他人的预期失败消息列表中预定义的,我也希望找到"banana",但我不应该将其添加到FAILURE_MSGS的词典。

最终发生的是每条线都有“苹果”或“香蕉”,而不仅仅是它找到两者。不知道为什么..

2 个答案:

答案 0 :(得分:2)

你需要改变自己的状况。现在,你正在测试“苹果”是否属实,以及“香蕉”是否在线。你最终会得到包含“banana”的所有行。

如果您将其更改为:

if FAILURE_MSGS[APPLE] in line and "banana" in line:

然后你应该得到你期望的行为(只处理包含“apple”和“banana”的行。)

答案 1 :(得分:1)

正确的代码是:

for line in out.splitlines():
    if FAILURE_MSGS[APPLE] in line and "banana" in line:
         <do something special with this line>

您的代码正在做什么:

  • 如果FAILURE_MSGS [APPLE] - 因为每个非空字符串返回true 是真的
  • if&#34; banana&#34; in line - 如果香蕉在行
  • ,则仅返回true

所以你会得到所有拥有&#34; banana&#34; - 不管&#34; apple&#34;