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

但它会改变,所以如果我从现在开始运行它十分钟,它可能会说:

Run script8.py


Run task9.py


Play asdf.mp3


Run unpause.py


Run newscript88.py

我需要它从上面的代码中获取打印的内容,并提取在本例中为的最后两个单词,并将其Run newscript88.py标记为字符串,以便稍后放入如下代码中:

os.startfile('Run newscript88.py')

所以从字面上看,它会从电子邮件中提取最后两个词,然后将最后两个词放入:

    os.startfile('last 2 words')
4

3 回答 3

3

您想要正文中的最后两个单词,作为变量中的字符串body,对吗?

确切的答案取决于您如何定义“单词”,但这里有一个非常简单的答案:

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

如果你打印它,你会得到类似['Run', 'newscript88.py']. 要将其放回字符串中,只需使用join

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

从您的示例数据来看,最后一个“单词”似乎至少可能包含空格,而您真正想要的是最后一行的两个单词……所以也许您想要这样的东西:

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

由于您不在 *NIX 系统上,因此我不能建议teeing 您的脚本和tailing 文件。

但是,我建议在您的程序中使用仅包含两项的缓冲区:

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]

在您的代码中使用此缓冲区并在打印出您的值之前添加到它。然后,在任何时候,缓冲区中的值都将是“最后两个值”

希望这可以帮助

于 2012-11-20T22:01:07.210 回答