2

我有一个关于 python 的简短问题:如何从文件中读取特定行?通过使用多个过滤器,下面是我当前的代码,它没有为我显示预期的结果:

for line in loglist:
    if (str('send') and str('packet')) in line:
        print line

所以,我想要打印包含“发送”和“数据包”这两个词的行,但它会打印所有包含发送或数据包的行。

非常感谢你们,

4

4 回答 4

3

单程:

if all( x in line for x in ('send','packet')):

如果您需要扩展到任意数量的条件,这是最有效的方法......

另一种方式:

if ('send' in line) and ('packet' in line):

只需 2 次检查,这可能会比上述更快。

于 2012-10-26T14:39:37.060 回答
3

你应该分开你的条件: -

if ('send' in line) and ('packet' in line):
    print line

如果你这样做: -

if (str('send') and str('packet')) in line:

这类似于说:-

if 'packet' in line:

因为,内部条件是and返回falselast,或者如果全部为 True,则返回最后一个值。

所以,str('send') and str('packet')等价于'packet'

而且您不需要str围绕它们进行包装。

于 2012-10-26T14:40:10.077 回答
0

(str('send') and str('packet'))

评估为“数据包”总是正确的(不是你想要的)。尝试

if "send" in line and "packet" in line

于 2012-10-26T14:40:39.593 回答
-1

(str('send') and str('packet'))评估为True。所以你说True in line,这当然行不通。你需要的是

if 'send' in line and 'packet' in line):
    print line

顺便说一句,在字符串上运行没有意义str(),为什么要将字符串转换为字符串?

于 2012-10-26T14:40:44.767 回答