使用 Python 实现自动化办公(邮件、Excel)

news/2025/1/20 3:19:46/

目录

一、Python 自动化办公的准备工作

1.1 安装必要的库

1.2 设置邮件服务

二、邮件自动化处理

2.1 发送邮件

示例代码

注意事项

2.2 接收和读取邮件

示例代码

三、Excel 自动化处理

3.1 读取和写入 Excel 文件

示例代码

3.2 数据处理和分析

示例代码

四、综合实例:从邮件中读取 Excel 附件并分析

示例代码


随着技术的进步,Python 的高效性和易用性使其成为办公自动化的强大工具。通过 Python,我们可以自动处理日常工作中的邮件、Excel 表格等任务,从而大幅提升效率。本文将详细介绍如何使用 Python 实现这些自动化功能,并附上关键代码示例。


一、Python 自动化办公的准备工作

1.1 安装必要的库

在实现自动化办公之前,需要安装相关库。以下是常用的 Python 库:

  • 邮件自动化smtplib(发送邮件),imaplib(接收邮件),email(处理邮件内容)。
  • Excel 操作openpyxl(操作 Excel 文件),pandas(数据处理)。
  • 环境配置dotenv(管理环境变量)。

安装方式如下:

pip install openpyxl pandas python-dotenv

1.2 设置邮件服务

为了能够发送和接收邮件,需要:

  • 确保邮箱已开启 SMTP(发送)和 IMAP(接收)服务。
  • 使用支持授权的 App 密钥(如 Gmail 的“应用专用密码”)。

二、邮件自动化处理

2.1 发送邮件

示例代码

以下代码实现了通过 SMTP 发送邮件:

python">import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipartdef send_email(sender_email, sender_password, recipient_email, subject, body):# 创建邮件对象msg = MIMEMultipart()msg['From'] = sender_emailmsg['To'] = recipient_emailmsg['Subject'] = subjectmsg.attach(MIMEText(body, 'plain'))# 连接到 SMTP 服务器并发送邮件try:with smtplib.SMTP('smtp.gmail.com', 587) as server:server.starttls()server.login(sender_email, sender_password)server.send_message(msg)print("邮件发送成功!")except Exception as e:print(f"邮件发送失败:{e}")# 调用示例
send_email(sender_email='your_email@gmail.com',sender_password='your_app_password',recipient_email='recipient@example.com',subject='测试邮件',body='这是一封通过 Python 发送的测试邮件。'
)
注意事项
  1. Gmail 用户需开启 “允许不安全应用访问” 或生成 App 密码。
  2. 替换 SMTP 服务地址时,其他邮箱服务商可能需要不同配置:
    • QQ 邮箱:smtp.qq.com
    • Outlook:smtp.office365.com

2.2 接收和读取邮件

示例代码

以下代码展示如何通过 IMAP 读取未读邮件:

python">import imaplib
import emaildef fetch_emails(email_address, password):try:# 连接 IMAP 服务器with imaplib.IMAP4_SSL('imap.gmail.com') as mail:mail.login(email_address, password)mail.select('inbox')  # 选择收件箱# 搜索未读邮件status, messages = mail.search(None, 'UNSEEN')for num in messages[0].split():status, msg_data = mail.fetch(num, '(RFC822)')for response_part in msg_data:if isinstance(response_part, tuple):msg = email.message_from_bytes(response_part[1])print(f"发件人: {msg['from']}")print(f"主题: {msg['subject']}")if msg.is_multipart():for part in msg.walk():if part.get_content_type() == 'text/plain':print(f"内容: {part.get_payload(decode=True).decode()}")else:print(f"内容: {msg.get_payload(decode=True).decode()}")except Exception as e:print(f"邮件读取失败:{e}")# 调用示例
fetch_emails('your_email@gmail.com', 'your_app_password')


三、Excel 自动化处理

3.1 读取和写入 Excel 文件

示例代码

使用 openpyxl 读取和写入 Excel:

python">import openpyxl# 打开 Excel 文件
workbook = openpyxl.load_workbook('example.xlsx')
sheet = workbook.active# 读取数据
for row in sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3):print([cell.value for cell in row])# 写入数据
sheet['A6'] = '新数据'
workbook.save('example_updated.xlsx')
print("Excel 文件已更新!")

3.2 数据处理和分析

示例代码

使用 pandas 对 Excel 数据进行分析:

python">import pandas as pd# 读取 Excel 文件
data = pd.read_excel('example.xlsx')# 打印前五行数据
print(data.head())# 数据处理
data['总分'] = data['数学'] + data['英语'] + data['科学']
print(data)# 保存结果
data.to_excel('processed.xlsx', index=False)
print("数据处理完成并已保存!")

四、综合实例:从邮件中读取 Excel 附件并分析

以下代码展示了一个完整的自动化工作流:

  1. 接收邮件并提取附件。
  2. 读取 Excel 数据,进行分析。
  3. 将结果发送回发件人。
示例代码
python">import os
import imaplib
import email
import pandas as pd
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplibdef fetch_and_process_email(email_address, password):# 连接 IMAPwith imaplib.IMAP4_SSL('imap.gmail.com') as mail:mail.login(email_address, password)mail.select('inbox')# 搜索含附件邮件status, messages = mail.search(None, 'ALL')for num in messages[0].split():status, msg_data = mail.fetch(num, '(RFC822)')for response_part in msg_data:if isinstance(response_part, tuple):msg = email.message_from_bytes(response_part[1])if msg.is_multipart():for part in msg.walk():if part.get_filename():  # 找到附件file_path = os.path.join(os.getcwd(), part.get_filename())with open(file_path, 'wb') as f:f.write(part.get_payload(decode=True))print(f"附件已保存: {file_path}")# 处理附件数据data = pd.read_excel(file_path)data['总分'] = data.sum(axis=1)processed_path = 'processed.xlsx'data.to_excel(processed_path, index=False)print("数据处理完成")# 返回处理结果send_email(sender_email=email_address,sender_password=password,recipient_email=msg['from'],subject='数据处理结果',body='附件已处理,请查看。',attachment_path=processed_path)def send_email(sender_email, sender_password, recipient_email, subject, body, attachment_path):msg = MIMEMultipart()msg['From'] = sender_emailmsg['To'] = recipient_emailmsg['Subject'] = subjectmsg.attach(MIMEText(body, 'plain'))# 添加附件with open(attachment_path, 'rb') as f:attachment = email.mime.base.MIMEBase('application', 'octet-stream')attachment.set_payload(f.read())email.encoders.encode_base64(attachment)attachment.add_header('Content-Disposition', f'attachment; filename={os.path.basename(attachment_path)}')msg.attach(attachment)# 发送邮件with smtplib.SMTP('smtp.gmail.com', 587) as server:server.starttls()server.login(sender_email, sender_password)server.send_message(msg)print("邮件已发送!")# 调用示例
fetch_and_process_email('your_email@gmail.com', 'your_app_password')


http://www.ppmy.cn/news/1564566.html

相关文章

微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能 微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。 1. WXML 代码 <radio-group bindchange"onRadioChange"><label wx:for"{{items}}" wx:key"id"><radio value"{{it…

昇腾环境ppstreuct部署问题记录

测试代码 我是在华为昇腾910B3上测试的PPStructure。 import os import cv2 from PIL import Image #from paddleocr import PPStructure,draw_structure_result,save_structure_res from paddleocr_asyncio import PPStructuretable_engine PPStructure(show_logTrue, imag…

[Easy] leetcode-14 最长公共前缀

一、题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"输入&#xff1a;strs [&qu…

springCloudGateway+nacos自定义负载均衡-通过IP隔离开发环境

先说一下想法&#xff0c;小公司开发项目&#xff0c;参考若依框架使用的spring-cloud-starter-gateway和spring-cloud-starter-alibaba-nacos, 用到了nacos的配置中心和注册中心&#xff0c;有多个模块&#xff08;每个模块都是一个服务&#xff09;。 想本地开发&#xff0c;…

Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的…

Gradio Tunneling 支持固定域名啦

这里是视频 实用的内网穿透小工具更新了&#xff0c;这次可以给个固定域名了 的笔记。 项目地址&#xff1a;https://github.com/arkohut/gradio-tunneling 之前我介绍过一个小工具 gradio-tunneling&#xff0c;它可以让非 gradio 创建的服务也使用 gradio 的 --share 功能。…

消息队列实战指南:三大MQ 与 Kafka 适用场景全解析

前言&#xff1a;在当今数字化时代&#xff0c;分布式系统和大数据处理变得愈发普遍&#xff0c;消息队列作为其中的关键组件&#xff0c;承担着系统解耦、异步通信、流量削峰等重要职责。ActiveMQ、RabbitMQ、RocketMQ 和 Kafka 作为市场上极具代表性的消息队列产品&#xff0…

使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程

使用 Java 开发 Android 应用&#xff1a;Kotlin 与 Java 的混合编程 在开发 Android 应用程序时&#xff0c;我们通常可以选择使用 Java 或 Kotlin 作为主要的编程语言。然而&#xff0c;有些开发者可能会想要在同一个项目中同时使用这两种语言&#xff0c;这就是所谓的混合编…