2010-05-28 379 views
0

只是學習Python並試圖做一個嵌套for循環。我最想做的事情是在一個文件中放置一堆電子郵件地址,並讓該腳本找到信息,例如發送郵件ID的IP。現在我對我的/var/log/auth.log文件測試它嵌套for循環

這裏是我到目前爲止的代碼:

#!/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 

裏面「testfile的」我有這個詞「斷」,因爲我知道它位於auth.log文件中。它只是沒有找到'斷開'這個詞。在「if line.find(email)> -1:」我可以替換電子郵件,並把「斷開」的腳本發現它很好。

有什麼想法? 在此先感謝。 加里

+0

你得到的輸出是什麼?你會得到「尋找斷開連接」? – 2010-05-28 20:32:52

回答

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