使用 python 提取电子邮件正文的第一行
Extract first line of email body using python
我可以使用 python(imap 和邮件模块)打开电子邮件,主要遵循此处的建议:How can I get an email message's text content using python?
但我只需要打印每封电子邮件正文的第一行 - 我该怎么做?
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
print part.get_payload() # prints the raw text
这是我目前必须打印正文的内容,有什么想法可以将其限制在电子邮件的第一行吗?
根据文档 get_payload() 应该 return 一个字符串,所以这应该有效。
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
lines=part.get_payload().split("\n")
print lines[0]
字符串库中有一个方法专门用于此操作 - splitlines()
,它负责处理不同的行结尾(\n 或 \r\n)。 From the doc:
For example, 'ab c\n\nde fg\rkl\r\n'.splitlines() returns ['ab c', '', 'de fg', 'kl'],
因为它 return 是一个数组,所以获取第一个元素是微不足道的 - [0]。如果最后一个元素以换行符结尾,它也不会 return 额外的空字符串,这与 split('n')
.
不同
此外,您最好使用 get_payload(decode=True)
,它会为您处理 base64 等解码。最后,这是您更新的示例:
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
# you may want to break it out in 2 statements for readability
print part.get_payload(decode=True).splitlines()[0] # prints the first line
顺便说一句,文本附件也是 'text/plain' 内容类型,可能会打乱您预期的数据;你可能想跳过那些 - see my post here(自引,xaxax)。
HTH
我可以使用 python(imap 和邮件模块)打开电子邮件,主要遵循此处的建议:How can I get an email message's text content using python?
但我只需要打印每封电子邮件正文的第一行 - 我该怎么做?
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
print part.get_payload() # prints the raw text
这是我目前必须打印正文的内容,有什么想法可以将其限制在电子邮件的第一行吗?
根据文档 get_payload() 应该 return 一个字符串,所以这应该有效。
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
lines=part.get_payload().split("\n")
print lines[0]
字符串库中有一个方法专门用于此操作 - splitlines()
,它负责处理不同的行结尾(\n 或 \r\n)。 From the doc:
For example, 'ab c\n\nde fg\rkl\r\n'.splitlines() returns ['ab c', '', 'de fg', 'kl'],
因为它 return 是一个数组,所以获取第一个元素是微不足道的 - [0]。如果最后一个元素以换行符结尾,它也不会 return 额外的空字符串,这与 split('n')
.
此外,您最好使用 get_payload(decode=True)
,它会为您处理 base64 等解码。最后,这是您更新的示例:
for part in email_message.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
# you may want to break it out in 2 statements for readability
print part.get_payload(decode=True).splitlines()[0] # prints the first line
顺便说一句,文本附件也是 'text/plain' 内容类型,可能会打乱您预期的数据;你可能想跳过那些 - see my post here(自引,xaxax)。
HTH