You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:47:56