阅读电子邮件正文,并将每一行放在不同的变量中

2024-10-01 02:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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时,我有这个:

^{pr2}$

这是邮件中的短信,没关系。这是配置消息,让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

这不是固定的,第一行可能是勒克斯,也可能是距离等。。在


Tags: ofimportreidmessagedatatimeresponse
1条回答
网友
1楼 · 发布于 2024-10-01 02:29:24

正则表达式的工作,真的(这种方法使用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']来获取值

相关问题 更多 >