我如何告诉python从一封类似列表结构的电子邮件中提取最后两个单词,但由于它的变化而不是python定义的列表?
代码还有更多内容,但我让它对特定的电子邮件进行排序和阅读(但此电子邮件消息会发生变化,并且更多内容会以一种有序的格式添加到电子邮件消息中,这种格式看起来像一个列表,但不是一个可以标记的物理列表..) 当它打印时,它会打印:我如何告诉python从一封类似列表结构的电子邮件中提取最后两个单词,但由于它的变化而不是python定义的列表?,python,windows,list,email,Python,Windows,List,Email,代码还有更多内容,但我让它对特定的电子邮件进行排序和阅读(但此电子邮件消息会发生变化,并且更多内容会以一种有序的格式添加到电子邮件消息中,这种格式看起来像一个列表,但不是一个可以标记的物理列表..) 当它打印时,它会打印: Run script8.py Run task9.py Play asdf.mp3 Run unpause.py 但它会发生变化,所以如果我在十分钟后运行它,它可能会说: Run script8.py Run task9.py Play asdf.mp3
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
我需要它从上面的代码中提取打印出来的内容,并提取最后两个单词,在本例中是运行newscript88.py
,然后将其标记为字符串,以便以后像这样放入代码中:
os.startfile('Run newscript88.py')
lastLine = body.split('\n')[-1]
lastTwoWords = lastLine.split(None, 1)
因此,从字面上看,它会从电子邮件中提取最后两个词,然后将最后两个词放入以下内容:
os.startfile('last 2 words')
您想要正文中的最后两个单词,它作为字符串存在于变量
body
中,对吗
确切答案取决于你如何定义“单词”,但这里有一个非常简单的答案:
lastTwoWords = body.split()[-2:]
如果您打印它,您将得到类似于['Run','newscript88.py']
的内容。要将其放回字符串中,只需使用join
:
os.startfile(' '.join(lastTwoWords))
从您的示例数据来看,似乎至少最后一个“单词”可能包含空格,而您真正想要的是最后一行的两个单词……因此,您可能想要这样的内容:
os.startfile('Run newscript88.py')
lastLine = body.split('\n')[-1]
lastTwoWords = lastLine.split(None, 1)
您想要正文中的最后两个单词,它作为字符串存在于变量
body
中,对吗
确切答案取决于你如何定义“单词”,但这里有一个非常简单的答案:
lastTwoWords = body.split()[-2:]
如果您打印它,您将得到类似于['Run','newscript88.py']
的内容。要将其放回字符串中,只需使用join
:
os.startfile(' '.join(lastTwoWords))
从您的示例数据来看,似乎至少最后一个“单词”可能包含空格,而您真正想要的是最后一行的两个单词……因此,您可能想要这样的内容:
os.startfile('Run newscript88.py')
lastLine = body.split('\n')[-1]
lastTwoWords = lastLine.split(None, 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'
尝试以下几点:
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'
由于您不在*NIX系统上,我不能建议
tee
ing脚本和tail
ing文件
但是,我建议在您的程序中使用只包含两项的缓冲区:
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]
在您的代码中使用此缓冲区,并在打印值之前添加到其中。然后,在任何时候,缓冲区中的值都将是“最后两个值”
希望这有帮助因为你不是在*NIX系统上,我不能建议
tee
ing你的脚本和tail
ing文件
但是,我建议在您的程序中使用只包含两项的缓冲区:
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]
在您的代码中使用此缓冲区,并在打印值之前添加到其中。然后,在任何时候,缓冲区中的值都将是“最后两个值”
希望这能有所帮助您几天前问过类似的问题吗?是的,它偏离了主题,我的问题措辞拙劣,没有解决方案,因此我正在努力更好地解释它。我不确定这是否重要,因为我试图重新问一个完全不同的问题。你是否试图找到一种方法,在不改变程序本身的情况下阅读程序打印到屏幕上的最后两行内容?几天前你问过类似的问题吗?是的,它偏离了主题,我的问题措辞糟糕,没有回答所以我试图更好地解释它。我不确定这是否重要,因为我试图重新问一个完全不同的问题。你是否试图找到一种方法,在不改变程序本身的情况下读取程序打印到屏幕上的最后两行?对于“获取最后两个单词”的情况,regexp几乎肯定是过火了…对于“获取最后两个单词”的情况,regexp几乎肯定是过火了…