2010-05-28 5 views
0

Просто изучите Python и попытайтесь сделать вложенный цикл. То, что я хотел бы сделать в конце, - разместить в файле кучу адресов электронной почты, и этот скрипт найдет информацию, такую ​​как IP-адрес отправки IP-адреса. Сейчас я пытаюсь использовать его на моем /var/log/auth.log файлinested for loop

Вот мой код до сих пор:

#!/usr/bin/python 

# this section puts emails from file(SpamEmail) in to a array(array) 
in_file = open("testFile", "r") 
array = in_file.readlines() 
in_file.close() 

# this section opens and reads the target file, in this case 'auth.log' 
log = open("/var/log/auth.log", "r") 
auth = log.readlines() 

for email in array: 
    print "Searching for " +email, 
    for line in auth: 
     if line.find(email) > -1: 
       about = line.split() 
       print about[0], 
    print 

Inside «TestFile» У меня есть слово «разъединение», потому что я знаю, он находится в файле auth.log. Он просто не находит слово «отключить». В строке «if line.find (email)> -1:« Я могу заменить электронную почту и поставить «отключить», что скрипты находят это хорошо.

Любая идея? Спасибо заранее. Гэри

+0

Какой результат вы получаете? Вы получаете «Поиск отключения»? –

ответ

1

Я не совсем уверен, что вы просите, но очевидная проблема с вышесказанным, что readlines() возвращает список строк, каждая из которых (за исключением потенциально последнего) будет иметь \n терминатор линии. Таким образом, email будет иметь новую строку в конце, поэтому не будет найден в line, если это не будет в конце.

Так что, возможно, что-то вроде:

with open('testFile', 'r') as f: 
    emails= f.read().split('\n') 
with open('/var/log/auth.log', 'r') as f: 
    lines= f.read().split('\n') 

for email in emails: 
    for linei, line in enumerate(lines): 
     if email in line: 
      print 'Line %d, found:' % linei 
      print line 
0

Я получил его. Мне нужно было добавить from __future__ import with_statement.