添加if / else到python解析器

时间:2014-04-01 05:17:52

标签: python parsing poplib

我这里有一段代码,它使用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()

2 个答案:

答案 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