【python实用小脚本-42】用Python提升效率,从电池提醒开始

用Python提升效率,从电池提醒开始

一、背景故事

上周,同事因为忘记充电,笔记本电脑在重要会议中突然关机,尴尬不已。我突然想到,如果有一段代码能实时提醒电池电量,就能避免这种尴尬。于是,我用Python写了一个简单的电池提醒程序,不仅解决了同事的困扰,还让我意识到Python在自动化处理和效率提升方面的巨大潜力。

二、核心代码解析

1. psutil.sensors_battery()
battery = psutil.sensors_battery()

技术原理
这行代码的作用是获取设备的电池状态。psutil是一个跨平台的库,可以获取系统信息,就像一个智能机器人,专门用来监控电脑的“健康状况”,而battery就是它专门用来检查电池状态的工具。

参数作用
这里没有显式的参数,但它会自动读取当前设备的电池信息,就像医生用听诊器检查病人一样。

易错点提示
新手可能会忘记安装psutil库,导致代码运行报错。安装方法很简单,只需要运行pip install psutil即可。

2. plyer.notification.notify()
notification.notify(
    title="Battery Percentage",
    message=str(cur_per) + "% Battery Remaining",
    timeout=5
)

技术原理
这行代码的作用是发送桌面通知。plyer是一个用于发送通知的库,就像一个“信使”,把消息传递给用户。

参数作用

  • title是通知的标题,就像信封上的收件人地址。
  • message是通知的具体内容,就像信封里的信件。
  • timeout是通知显示的时间,单位是秒,就像信件的“有效期”。

易错点提示
新手可能会忘记设置timeout参数,导致通知一直显示,影响用户体验。

3. while True循环
while (True):
    # 循环体

技术原理
while True是一个无限循环,就像一个永不停歇的自动化流水线,会一直重复执行循环体内的代码。

参数作用
这里没有参数,但循环体内的代码逻辑很重要,决定了循环的行为。

易错点提示
新手可能会忘记在循环体内添加退出条件,导致程序卡死。在本例中,我们通过threshold来控制通知的发送频率。

三、扩展应用场景开发

基础版:简单电池提醒

场景痛点
用户需要手动查看电池电量,容易忘记充电。

技术选型对比

  • 简单提醒:使用plyer发送桌面通知,简单易用。
  • 复杂提醒:可以通过邮件或短信提醒用户,但需要额外的邮件或短信服务支持。

代码改进示范

import psutil
from plyer import notification

threshold = int(input('请输入提醒阈值(百分比):'))

battery = psutil.sensors_battery()
percent = battery.percent

while True:
    battery = psutil.sensors_battery()
    cur_per = battery.percent
    change = cur_per - percent
    diff = abs(change)

    if diff >= threshold:
        notification.notify(
            title="电池电量提醒",
            message=f"当前电量:{cur_per}%",
            timeout=5
        )
        percent = cur_per
专业版:跨平台电池提醒

场景痛点
用户可能在不同设备上使用程序,需要跨平台支持。

技术选型对比

  • 本地提醒:使用plyer,简单但局限于本地设备。
  • 跨平台提醒:可以通过Web服务推送通知,如使用Firebase Cloud Messaging(FCM)。

代码改进示范

import psutil
import requests

threshold = int(input('请输入提醒阈值(百分比):'))

battery = psutil.sensors_battery()
percent = battery.percent

def send_notification(message):
    url = "https://fcm.googleapis.com/fcm/send"
    headers = {
        "Authorization": "key=YOUR_SERVER_KEY",
        "Content-Type": "application/json"
    }
    data = {
        "to": "YOUR_DEVICE_TOKEN",
        "notification": {
            "title": "电池电量提醒",
            "body": message
        }
    }
    response = requests.post(url, headers=headers, json=data)
    if response.status_code != 200:
        print("通知发送失败")

while True:
    battery = psutil.sensors_battery()
    cur_per = battery.percent
    change = cur_per - percent
    diff = abs(change)

    if diff >= threshold:
        send_notification(f"当前电量:{cur_per}%")
        percent = cur_per
企业级方案:电池管理与数据分析

场景痛点
企业需要监控设备的电池状态,并进行数据分析以优化设备使用。

技术选型对比

  • 本地监控:使用psutilplyer,适合单机使用。
  • 企业级监控:可以使用数据库存储电池数据,并通过Web可视化工具(如Grafana)进行分析。

代码改进示范

import psutil
import sqlite3
import time

threshold = int(input('请输入提醒阈值(百分比):'))

# 创建数据库
conn = sqlite3.connect('battery_data.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS battery (
                timestamp DATETIME,
                percent INTEGER
            )''')
conn.commit()

battery = psutil.sensors_battery()
percent = battery.percent

while True:
    battery = psutil.sensors_battery()
    cur_per = battery.percent
    change = cur_per - percent
    diff = abs(change)

    if diff >= threshold:
        c.execute("INSERT INTO battery (timestamp, percent) VALUES (?, ?)",
                  (time.strftime("%Y-%m-%d %H:%M:%S"), cur_per))
        conn.commit()
        print(f"记录电量:{cur_per}%")
        percent = cur_per
    time.sleep(60)  # 每分钟检查一次

四、教学代码示例

案例1:办公自动化方向(自动生成Excel报告+邮件发送)

代码骨架

import pandas as pd
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 数据生成
data = {
    "姓名": ["张三", "李四", "王五"],
    "销售额": [100, 200, 300]
}
df = pd.DataFrame(data)

# 保存为Excel文件
df.to_excel("销售报告.xlsx", index=False)

# 发送邮件
smtp_server = "smtp.邮箱服务器.com"
smtp_port = 587
smtp_user = "你的邮箱"
smtp_password = "你的邮箱密码"

msg = MIMEMultipart()
msg["From"] = smtp_user
msg["To"] = "收件人邮箱"
msg["Subject"] = "销售报告"

with open("销售报告.xlsx", "rb") as f:
    attachment = MIMEText(f.read(), "base64", "utf-8")
    attachment["Content-Disposition"] = "attachment; filename='销售报告.xlsx'"
    msg.attach(attachment)

server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(smtp_user, smtp_password)
server.sendmail(smtp_user, ["收件人邮箱"], msg.as_string())
server.quit()
案例2:智能物联网方向(树莓派温湿度监测+微信报警)

代码骨架

import Adafruit_DHT
import requests

sensor = Adafruit_DHT.DHT11
pin = 4  # GPIO引脚

def send_wechat_alert(message):
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_WEBHOOK_KEY"
    headers = {"Content-Type": "application/json"}
    data = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }
    response = requests.post(url, headers=headers, json=data)
    if response.status_code != 200:
        print("微信报警失败")

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if temperature > 30:
    send_wechat_alert(f"温度过高:{temperature}℃")

五、结尾模板

这个案例的完整源码已开源在我的GitCode仓库,可自行搜索下载,如果需要完整可运行的版本,老规矩——评论区留言“代码包”,我会第一时间私信发你。


学以致用练习题

  1. 如何修改threshold参数,让电池提醒更符合你的使用习惯?
  2. 在办公自动化案例中,如何修改代码,让邮件同时发送给多个收件人?
  3. 在物联网案例中,如何添加湿度报警功能?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值