大家好,我确实需要您在Outlook中想要做的事情的帮助。
1)我有一个列表,其中包含Outlook级别的文件夹名称['fried chicken'; “煮意大利面”; “烤土豆”](已存在且为空的文件夹。(元素是由两个词组成的字符串,例如“炸鸡”)]
2)我在收件箱中搜索所有邮件,如果message.subject与列表中的元素之一匹配,则将该电子邮件移至文件夹(例如:电子邮件主题为“鸡肉的炸法”或“我喜欢烤土豆” ...正如您所看到的,它不是一字串的字符串,因此我的信息不正确。移动调用未找到任何相关内容。
这是我想做的。下面是我要调整的“代码”。
for message in messages:
name = str(message.subject)
message = messages.GetPrevious()
if any(x in name for x in list):
print(str(name))
#print("Email " + name + " goes into folder " + alerts_folder[list])
message.Move(alerts_folder.Folders[list])
尝试:
for message in messages:
name = str(message.subject)
message = messages.GetPrevious()
for y in list:
if any(x in name for x in y.split():
print(str(name))
#print("Email " + name + " goes into folder " + alerts_folder[list])
message.Move(alerts_folder.Folders[list])
上面的代码首先遍历列表,然后拆分列表中的每个元素(因为每个元素都是两个单词的字符串)。
我认为问题是由于if any(x in name for x in list)
中的x是整个文件夹名称。
如果您的主题是“炸鸡好吃”,则代码将与文件夹“炸鸡”匹配,但与“炸鸡”文件夹不匹配。
您可以尝试使用以下代码:
subject = "How fried is the chicken"
folders = ['fried chicken', 'boiled pasta', 'baked potatoes']
for folder in folders:
keywords = folder.split()
any(keyword in subject for keyword in keywords)
输出将是:
True
False
False
注意,这也适用于部分主题匹配,例如:
subject2 = "chicken tasty"
即,如果主题字符串中只有文件夹关键字,它将返回true。
考虑使用all()
功能而不是any()
要求文件夹名称中的所有关键字都在主题中
for folder in folders:
keywords = folder.split()
all(keyword in subject for keyword in keywords)