嵌套for循环
我刚开始学习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