2012-10-26 28 views
2

我有一個關於python的簡短問題: 如何從文件讀取特定行? 通過使用多個過濾器,波紋管是我當前的代碼,這並不表明預期的結果對我來說:如何從Python中的多個條件的文件中打印行?

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

所以,我要的是打印同時包含單詞「發送」線和「包」 , 但它打印所有包含發送或數據包的行。

許多在此先感謝球員,

+1

如果您在python shell中嘗試(str()..和..str())表達式,您會發現結果是「數據包」,也就是最後一個術語,因爲操作強制執行所有評估條款。我的直觀方法是正則表達式匹配,但即使這可能會更快,但它不會比給出答案中的解決方案更漂亮,特別是如果單詞可能以任何順序出現。 – guidot

回答

3

方式一:

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

這是最有效的方法,如果你需要擴展到條件任意數量做...

另一種方式:

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

只需2檢查,這很可能是f比上述更重要。

+0

非常感謝兄弟,第二個版本非常完美! – psilos

3

你應該分開你的條件: -

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

如果你這樣做: -

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

它類似於說: -

if 'packet' in line: 

因爲,內條件是and其中返回s last假值如果全部爲真,則返回最後一個值。

所以,str('send') and str('packet')相當於'packet'

而且你不需要他們周圍str包裝。

0

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

結果爲 「包」 與始終是真實的(不是你想要的)。嘗試

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

+0

非常感謝的傢伙,與分離完美! :-) – psilos

+0

它評估爲「包」,而不是真的。 – glglgl

+0

嗯,果然。我猜想我不像自己那麼聰明。 – engineerC

-1

(str('send') and str('packet'))評估爲True。所以你說True in line,這當然不起作用。你需要的是

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

順便說一句,這是沒有意義的運行上的繩子str(),爲什麼你會字符串轉換爲字符串?

+0

不,它評估爲「發送」。 – glglgl

+1

@glglgl。我認爲它評估爲「包」,這是最後一個真正的價值。 –

+0

@RohitJain你說得對。 – glglgl

相關問題