0

コードにはまだまだありますが、特定の電子メールを並べ替えて読み取らせます(ただし、この電子メールメッセージは変更され、リストのように見えますが、物理的なリストではない順序付けられた形式で電子メールメッセージに追加されます。ラベルが付けられます。)

for num in data[0].split():
        typ, msg_data = conn.fetch(num, '(RFC822)')
        for response_part in msg_data:
            if isinstance(response_part, tuple):
                msg = email.message_from_string(response_part[1])
                subject=msg['subject']                   
                payload=msg.get_payload()
                body=extract_body(payload)
                print(body)
    #the portion of the code is these sources:unutbu and Doug Hellmann's tutorial on  imaplib

それが印刷するときそれは印刷します:

Run script8.py


Run task9.py


Play asdf.mp3


Run unpause.py

しかし、それは変わるので、今から10分後に実行すると、次のように表示される場合があります。

Run script8.py


Run task9.py


Play asdf.mp3


Run unpause.py


Run newscript88.py

そして、上記のコードから出力されたものを取得し、この例では最後の2つの単語をプルして、Run newscript88.py後で次のようなコードに入れるための文字列としてラベルを付ける必要があります。

os.startfile('Run newscript88.py')

したがって、文字通り、電子メールメッセージの最後の2単語を取得し、最後の2単語を次のように配置します。

    os.startfile('last 2 words')
4

3 に答える 3

3

変数の文字列として持っている本文の最後の2つの単語が必要ですbodyよね?

正確な答えは「単語」の定義方法によって異なりますが、非常に簡単な答えは次のとおりです。

lastTwoWords = body.split()[-2:]

それを印刷すると、のようなものが得られます['Run', 'newscript88.py']。それを文字列に戻すには、次を使用しますjoin

os.startfile(' '.join(lastTwoWords))

サンプルデータから、少なくとも最後の「単語」にスペースが含まれている可能性があります。本当に必要なのは、最後の行の2つの単語です。したがって、次のようなものが必要になる場合があります。

lastLine = body.split('\n')[-1]
lastTwoWords = lastLine.split(None, 1)
于 2012-11-20T21:42:52.943 に答える
1

次の行に沿って何かを試してください。

import re
pat = re.compile('\w+ \w+[.]*$') # not very good regex
here_text = r'''here is some text
with lots of words, of which I only
want the LJ;lkdja9948 last two'''
i = pat.search(here_text)
i.group()
>> 'last two'
于 2012-11-20T21:48:03.000 に答える
0

tee* NIXシステムを使用していないため、スクリプトとファイルを提案することはできませんtail

ただし、プログラムで2つの項目のみを保持するバッファーを使用することをお勧めします。

class Buffer:
    def __init__(self):
        self.items = []
    def add(self, item):
        self.items.append(item)
        self.items = self.items[-2:]
    def __str__(self):
        return "[%s, %s]" %(self.items[0], self.items[1])
    def __getitem__(self, i):
        return self.items[i]

コードでこのバッファーを使用し、値を出力する直前に追加します。その後、いつでも、バッファ内の値は「最後の2つの値」になります

お役に立てれば

于 2012-11-20T22:01:07.210 に答える