我这里有一段代码,它使用gmail POP来解析来自短信的消息(1xxxxxxxxx7@vtext.com)。我希望解析器能够在消息中搜索多个字符串,并根据每个不同的字符串相应地运行代码。现在,解析器设置为查找序列'谢谢你'但我不知道如何扩展这个,因为我对python非常新。我的代码如下:
import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('xxxxxxxxxxxxx')
pop_conn.pass_('xxxxxxxxxxxxx')
#Get messages from server:
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(Thankyou) for Thankyou in messages]
for message in messages:
print 'Data Received'
pop_conn.quit()
答案 0 :(得分:0)
您提供的代码段使用列表推导 - Python中最强大的运算符。如果你想编写Python,你必须学习它们。 Here is the beginning。
截至你的问题 - 谢谢你这里只是一个变量名,它没有任何意义。
答案 1 :(得分:0)
看起来你正在努力克服列表理解。
#List comprehension
messages = [parser.Parser().parsestr(Thankyou) for Thankyou in messages]
#Equivalent for loop
#Temporary list
temp = []
#Loop through all elements in messages
for Thankyou in messages:
#If parsestr returns True for the current element (i.e. it's the string you're looking for)
if parser.Parser().parsestr(Thankyou):
temp.append(Thankyou)
#Overwrite the messages list with the temporary one
messages = temp
正如您所看到的,列表理解更简洁,更易读。他们在Python代码中使用了很多,但他们并不害怕。只需将它们视为for循环,迭代遍历给定容器中的每个元素。
为了搜索更多令牌,当您遇到要查找的字符串时,您似乎需要编辑parsestr()
方法以返回True
。