0

gmail POP を使用して、テキスト メッセージ (1xxxxxxxxx7@vtext.com) からのメッセージを解析するコード スニペットをここに示します。パーサーがメッセージ内の複数の文字列を検索し、それぞれの文字列に応じてコードを実行できるようにしたいと考えています。現在、パーサーは「Thank you」を含むシーケンスを検索するように設定されていますが、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()
4

2 に答える 2

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

于 2014-04-01T08:18:16.183 に答える
0

あなたが提供したコード スニペットは、Python で最も強力な演算子であるリスト内包表記を使用しています。Python を書きたければ、それらを学ばなければなりません。ここから始まります。

あなたの質問の時点で-ThankYouは単なる変数名であり、何の意味もありません。

于 2014-04-01T05:48:54.033 に答える