使用文本文件搜索字符串,然后通过电子邮件发送几行代码。
我有搜索工作,它打印正确的行 电子邮件成功发送,但它只包含输出的最后一行
有什么想法?
File.txt
first
second
thrid
------------------------------------------------------------------------------
after first
after second
after thrid
after forth
after fifth
after sixth
我的代码
import smtplib
from email.mime.text import MIMEText
from_address = "fromaddress@domain.com"
to_address = "toaddress@domain.com"
with open("file.txt", "r") as f:
searchlines = f.readlines()
for i, line in enumerate(searchlines):
if "------------------------------------------------------------------------------" in line:
for l in searchlines[i:i+6]: print l,
output = l
msg = MIMEText(output)
msg['Subject'] = "Test email"
msg['From'] = from_address
msg['To'] = to_address
body = output
# Send the message via local SMTP server.
s = smtplib.SMTP('smtp.domain.com', '8025')
s.sendmail(from_address, to_address, msg.as_string())
s.quit()
通过打印输出:
------------------------------------------------------------------------------
after first
after second
after thrid
after forth
after fifth
电子邮件仅包含在正文中
after fifth
答案 0 :(得分:1)
你的缩进是不可靠的。循环应收集行,然后您应该在收集所有行后发送电子邮件。
output = l
真正的错误是l
只会在最里面的for l
循环之后收集break
的最后一个值,但重组程序时不应该只在循环中执行操作发生一次(反之亦然!)希望也能让它更清晰。
如果可以有多个结果,只需删除{{1}}就不够了 - 这将以不同的形式恢复原始错误,其中只发送六行的最后一个匹配。如果您需要支持多个结果,您的代码需要以某种方式将它们组合成一个消息。
答案 1 :(得分:-1)
你的for循环打印所有行,但循环结束,l设置为循环中的最后一项:第五个
然后你通过电子邮件发送最后一个