2017-09-06 99 views
0

我有以下代碼:一個比較x.split()[現場]一些值

with open('/home/adiel/log', 'r') as f: 

    for line in [[x.split()[3], x.split()[4], x.split()[5], x.split()[6]] for x in f]: 
     print(line) 

它工作正常,併爲我打印這些值:

['172.18.0.124', '172.18.0.5', '3306', '39064'] 
['172.18.0.124', '172.18.0.5', '3306', '62717'] 
['172.18.0.5', '172.18.0.124', '52909', '3306'] 
['172.18.0.5', '172.18.0.124', '13989', '3306'] 

但我想將x.split()[5]44365535等一些值進行比較,只有與它們匹配時纔打印行。 我該如何做到這一點? 感謝的

+0

呃......''x.split()[3],x.split()[4],x.split()[5],x.split()[6]]'x.split ()[3:7]',不是嗎? – DyZ

+0

'if line [2] == :print(line)' –

+0

對不起,我是初學者,忘記了,但是,完成了:for [x.split()[3:7]] for x in f]: – Adiel

回答

1

您可以創建劈叉發電機然後打印過濾值:

with open('/home/adiel/log', 'r') as f: 
    iter_lines = (x.split() for x in f) 
    for line in (x[3:7] for x in iter_lines if x[5] in {'443', '65535'}): 
     print(line) 

或者使用一個for循環split()行,如果條件滿足打印:

with open('/home/adiel/log', 'r') as f: 
    for line in f: 
     line = line.split() 
     if line[5] in {'443', '65535'}: 
      print(line[3:7]) 
+0

爲什麼不通過生成整個表達式?如果x [5]在LOOKUP_VALUES中爲[(x [3:7]),那麼在iter_lines中的x [5] –

+1

@JoshK真的,編輯謝謝! –

+0

感謝你!Moe的解決方案對我來說非常完美。 – Adiel