如何用Python从Outlook邮件正文中提取指定数值?
提取邮件营收指标到Pandas DataFrame的解决方案
嘿,我来帮你搞定这个从邮件内容里提取关键指标的问题!你的邮件内容格式很规律,刚好可以用正则表达式精准提取我们需要的数值,下面是具体的步骤和代码实现:
步骤1:导入正则表达式模块
我们需要用re模块来匹配邮件里的数值,所以先在代码开头加上:
import re
步骤2:创建指标提取函数
写一个专门处理单条邮件内容的函数,从内容里提取Demand、Orders、Units的整数值:
def extract_metrics(content): # 匹配Demand的数值:捕获$后面带逗号的数字,再去掉逗号转整数 demand_match = re.search(r'Demand: \$([\d,]+)', content) demand = int(demand_match.group(1).replace(',', '')) if demand_match else None # 匹配Orders的纯数字数值 orders_match = re.search(r'Orders: (\d+)', content) orders = int(orders_match.group(1)) if orders_match else None # 匹配Units的纯数字数值 units_match = re.search(r'Units: (\d+)', content) units = int(units_match.group(1)) if units_match else None return {'Demand': demand, 'Orders': orders, 'Units': units}
函数说明:
- 正则表达式
r'Demand: \$([\d,]+)':精准定位Demand: $开头的内容,捕获括号里的数字+逗号组合,再用replace(',', '')去掉千位分隔符,转成整数。 - Orders和Units的格式更简单,直接匹配冒号后的纯数字即可。
步骤3:批量处理所有邮件内容
把提取函数应用到email_content列表的每一项,生成指标字典列表后转成DataFrame,再和原有的主题、日期数据合并:
# 批量提取所有邮件的指标 metrics_list = [extract_metrics(content) for content in email_content] metrics_df = pd.DataFrame(metrics_list) # 合并主题、日期与指标数据 final_df = pd.DataFrame({ 'Subject': email_subject, 'Date': email_date }).join(metrics_df)
测试示例内容
用你给出的示例内容测试一下,验证提取效果:
sample_content = ' \r\nDemand: $41,225 (-47%)\t \r\n \r\nOrders: 515 (-53%)\t \r\nUnits: 849 (-59%)\t \r\n \r\nAOV: $80 (12%) \r\nAUR: $49 (30%) \r\n \r\nOrders with Promo Code: 3% \r\nAverage Discount: 21% ' print(extract_metrics(sample_content)) # 输出:{'Demand': 41225, 'Orders': 515, 'Units': 849}
完全符合预期!
完整代码整合
把所有代码整合到一起,就是这样:
import os import pandas as pd import datetime as dt import win32com.client import re outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") inbox = outlook.GetDefaultFolder(6) messages = inbox.Items # Empty Lists email_subject = [] email_date = [] email_content = [] # Find emails for message in messages: if message.SenderEmailAddress == 'oracle@xyz.com' and message.Subject.startswith('Demand'): email_subject.append(message.Subject) email_date.append(message.senton.date()) email_content.append(message.body) # 定义指标提取函数 def extract_metrics(content): demand_match = re.search(r'Demand: \$([\d,]+)', content) demand = int(demand_match.group(1).replace(',', '')) if demand_match else None orders_match = re.search(r'Orders: (\d+)', content) orders = int(orders_match.group(1)) if orders_match else None units_match = re.search(r'Units: (\d+)', content) units = int(units_match.group(1)) if units_match else None return {'Demand': demand, 'Orders': orders, 'Units': units} # 生成最终DataFrame metrics_list = [extract_metrics(content) for content in email_content] metrics_df = pd.DataFrame(metrics_list) final_df = pd.DataFrame({ 'Subject': email_subject, 'Date': email_date }).join(metrics_df) # 查看结果 print(final_df.head())
这样你就能得到包含邮件主题、日期,以及Demand、Orders、Units三个核心指标的DataFrame,方便后续做数据分析啦!
内容的提问来源于stack exchange,提问作者Abhay
相关产品推荐
相关产品推荐

