import imaplib
import re
mail = imaplib.IMAP4_SSL("imap.gmail.com", 993)
mail.login("****iot@gmail.com","*****iot")
while True:
mail.select("inbox")
status, response = mail.search(None,'(SUBJECT "Example")')
unread_msg_nums = response[0].split()
data = []
for e_id in unread_msg_nums:
_, response = mail.fetch(e_id, '(UID BODY[TEXT])')
data.append(response[0][1].decode("utf-8"))
str1 = ''.join(map(str,data))
#a = int(re.search(r"\d+",str1).group())
print(str1)
#for e_id in unread_msg_nums:
#mail.store(e_id, '+FLAGS', '\Seen')
当我打印str1时,我有这个:
Temperature:time,5
Lux:time,6
Distance:time,3
这是电子邮件中的文字,没问题。它为raspberry pi做了一些配置消息。 对于温度,勒克斯和距离,我可以为它们设置1-10个数字(分钟),并且该数字表示时间,例如在此期间将在循环中发生某些事情。这都是电子邮件的一面。如何将每一行放入一些不同的变量,并在以后检查它们?
**For example**
string1= first line of message #Temperature:time,5
string2= second line of message #Lux:time,6
string3= third line of message #Distance:time,3
这不是修复,第一行可能是Lux,或者可能是距离等。
答案 0 :(得分:1)
正则表达式的工作,实际上(这种方法使用dict理解):
import re
string = """
Temperature:time,5
Lux:time,6
Distance:time,3
"""
rx = re.compile(r'''^(?P<key>\w+):\s*(?P<value>.+)$''', re.MULTILINE)
cmds = {m.group('key'): m.group('value') for m in rx.finditer(string)}
print(cmds)
# {'Lux': 'time,6', 'Distance': 'time,3', 'Temperature': 'time,5'}
命令发生的顺序并不重要,但它们必须是唯一的(否则它们将被下一个匹配覆盖)。之后,您可以通过例如获得您的价值观。 cmds['Lux']