2017-09-06 14 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]443または65535のような値を比較し、一致する場合にのみ、行を印刷します。 どうすればいいですか? 感謝の

+0

を(2)x.split(3)、x.split(4)、x.split(5)、x.split(6) ()[3:7] '、いいえ? – DyZ

+0

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

+0

申し訳ありません、初心者で、忘れましたが、完了しました:[x.split()[3:7] 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) 

それともsplit()ラインにforループを使用して、条件が満たされた場合、印刷:

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

なぜ完全な式を生成しないのですか? 'LOOKUP_VALUESのx [5]ならiter_linesのxのためのx [3:7] for –

+1

@JoshK True、編集ありがとう! –

+0

皆さんありがとう! – Adiel

関連する問題