嵌套for循环

0 投票
2 回答
554 浏览
提问于 2025-04-15 23:18

我刚开始学习Python,想做一个嵌套的for循环。最后我想把一堆电子邮件地址放到一个文件里,然后让这个脚本去找一些信息,比如邮件ID的发送IP。目前我在测试我的/var/log/auth.log文件。

这是我到目前为止写的代码:

#!/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'里我放了“disconnect”这个词,因为我知道它在auth.log文件里。可是脚本就是找不到“disconnect”这个词。在“if line.find(email) > -1:”这一行,我可以把email替换成“disconnect”,这样脚本就能找到它了。

有什么想法吗?谢谢!

Gary

2 个回答

0

我明白了。我需要加上 from __future__ import with_statement 这一行。

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

撰写回答