2014-04-01 48 views
0

我在這裏有一段代碼,它使用gmail POP來解析來自文本消息([email protected])的消息。我希望解析器能夠在消息中搜索多個字符串,並根據每個不同的字符串相應地運行代碼。現在,解析器被設置爲用'Thank you'查找序列,但我不知道如何擴展這個,因爲我對Python非常陌生。我的代碼如下:添加if/else到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

您提供的代碼片段使用列表推導 - Python中最強大的運算符。如果你想編寫Python,你必須學習它們。 Here is the beginning

至於你的問題 - ThankYou這裏只是一個變量名,它沒有任何意義。

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代碼中使用很多,但它們並不可怕。只要將它們想象成循環遍歷給定容器中的每個元素即可。

爲了搜索更多的標記,看起來您需要編輯parsestr()方法,以便在遇到要查找的字符串時返回True

+0

所以,如果我想添加另一個輸出,我會把這樣的東西? 爲三江源的消息: #如果parsestr當前元素返回True(也就是說,它就是你要找的字符串) 如果parser.Parser()parsestr(三江源): temp.append(三江源) ELSIF解析器.Parser()。parsestr(關機): #運行關機代碼 – SuperAdmin