如何将DataFrame行转为多行语句并通过Twilio发送告警?
使用Twilio发送嵌入DataFrame数据的告警
我来给你一步步拆解怎么实现这个需求,其实操作起来很直观,咱们按流程来:
1. 先装好需要的工具库
首先得确保你安装了处理DataFrame的pandas和Twilio的SDK,打开终端跑这个命令:
pip install pandas twilio
2. 导入必要的模块
在你的Python脚本里导入这两个库:
import pandas as pd from twilio.rest import Client
3. 初始化Twilio客户端
你需要从Twilio控制台获取自己的Account SID、Auth Token,还有Twilio分配给你的发送号码(格式要带国家代码,比如+1234567890)。把这些信息填到下面的代码里:
# 替换成你自己的Twilio账号信息 account_sid = '你的Account SID' auth_token = '你的Auth Token' client = Client(account_sid, auth_token) # 发送方(Twilio号码)和接收方号码 from_number = '+你的Twilio号码' to_number = '+接收告警的手机号码'
4. 生成嵌入DataFrame数据的告警文本
针对你给出的示例DataFrame,我们可以把数据整理成清晰的告警内容,比如按zone分组汇总任务信息。先构造你的示例DataFrame,然后生成文本:
# 构造你提供的示例DataFrame data = { 'zone': [2.0, 2.0, 2.0, 3.0, 3.0, 3.0], 'script': ['Consumers', 'Inventory', 'Orders_Details', 'Consumers', 'Inventory', 'Orders_Details'], 'totalcount': [1, 1, 1, 1, 1, 1], 'datetimecomplete': ['2018-05-02 17:46:38.232354']*6 } df = pd.DataFrame(data) # 生成告警文本 alert_text = "任务执行完成告警:\n" # 按zone分组汇总 for zone, group in df.groupby('zone'): tasks = ', '.join([f"{row['script']}({row['totalcount']}次)" for _, row in group.iterrows()]) alert_text += f"Zone {zone}: {tasks}\n" # 加上完成时间(取第一条的时间即可,因为示例里时间都一致) alert_text += f"完成时间: {df['datetimecomplete'].iloc[0]}"
生成的告警文本大概是这样:
任务执行完成告警:
Zone 2.0: Consumers(1次), Inventory(1次), Orders_Details(1次)
Zone 3.0: Consumers(1次), Inventory(1次), Orders_Details(1次)
完成时间: 2018-05-02 17:46:38.232354
当然你也可以根据需求调整格式,比如逐行发送每个任务的告警,或者用*突出显示某些关键数据(比如totalcount超过阈值的任务)。
5. 发送告警短信
最后调用Twilio的接口发送短信就行:
message = client.messages.create( body=alert_text, from_=from_number, to=to_number ) # 可以打印message.sid来确认发送成功 print(f"告警已发送,消息ID: {message.sid}")
小提示
- 确保接收号码已经在Twilio控制台验证过(免费账户需要验证),否则可能发送失败。
- 如果DataFrame数据量很大,要注意短信的字数限制(一般单条短信最多1600字符左右),可以拆分多条发送或者精简内容。
内容的提问来源于stack exchange,提问作者RustyShackleford
相关产品推荐
相关产品推荐

