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

目录

一、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 发送邮件:

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 读取未读邮件:

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:

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 数据进行分析:

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. 将结果发送回发件人。
示例代码
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.rhkb.cn/news/501.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业级PHP异步RabbitMQ协程版客户端 2.0 正式发布

概述 workerman/rabbitmq 是一个异步RabbitMQ客户端,使用AMQP协议。 RabbitMQ是一个基于AMQP(高级消息队列协议)实现的开源消息组件,它主要用于在分布式系统中存储和转发消息。RabbitMQ由高性能、高可用以及高扩展性出名的Erlan…

百度视频搜索架构演进

导读 随着信息技术的迅猛发展,搜索引擎作为人们获取信息的主要途径,其背后的技术架构也在不断演进。本文详细阐述了近年来视频搜索排序框架的重大变革,特别是在大模型技术需求驱动下,如何从传统的多阶段级联框架逐步演变为更加高…

31_搭建Redis分片集群

Redis的主从复制模式和哨兵模式可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:海量数据存储问题、高并发写的问题。由于数据量过大,单个master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Red…

如何用 ESP32-CAM 做一个实时视频流服务器

文章目录 ESP32-CAM 概述ESP32-S 处理器内存Camera 模块MicroSD 卡槽天线板载 LED 和闪光灯其他数据手册和原理图ESP32-CAM 功耗 ESP32-CAM 引脚参考引脚排列GPIO 引脚哪些 GPIO 可以安全使用?GPIO 0 引脚MicroSD 卡引脚 ESP32-CAM 的烧录方式使用 ESP32-CAM-MB 编程…

LS1046+XILINX XDMA PCIE调通

欢迎点赞收藏,欢迎私下讨论技术,分享技术 硬件平台 :NXP LS1046 XILINX FPGA 软件平台:LINUX 4.19.68 buildroot LS1046 PEX3 接 XILINX FPGA,linux使用designware的PCI主控制器。下载XILINX DMA驱动,解…

golang常用标准库

输入与输出-fmt包时间与日期-time包命令行参数解析-flag包日志-log包IO操作-os包IO操作-bufio包与ioutil包strconv包模板-template包http包contextjson/xmlreflect反射官方标准库 输入与输出-fmt包 输入与输出 常用输出函数 Print、Printf、Println:直接输出内容 Sp…

【物联网原理与运用】知识点总结(上)

目录 名词解释汇总 第一章 物联网概述 1.1物联网的基本概念及演进 1.2 物联网的内涵 1.3 物联网的特性——泛在性 1.4 物联网的基本特征与属性(五大功能域) 1.5 物联网的体系结构 1.6 物联网的关键技术 1.7 物联网的应用领域 第二章 感知与识别技术 2.1 …

macOS 安装tomcat9

macOS 安装tomcat9 URL:https://tomcat.apache.org/download-90.cgi 解压之后放到指定目录 /Users/lanren/install/tomcat-9 自己取个名字就行 给权限: ① 先进行权限修改:终端输入sudo chmod 755 /Users/lanren/install/tomcat-9/bin/…

基于STM32的智能家居蓝牙系统(论文+源码)

1总体方案设计 本次基于STM32的智能家居蓝牙系统,其系统总体架构如图2.1所示,采用STM32f103单片机作为控制器,通过DHT11传感器实现温湿度检测,MQ-2烟雾传感器实现烟雾检测,光敏电阻实现光照检测,同时将数据…

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式,该处理呢? 文件系统内部的错误,如索引错误、元数据损坏等,也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误,可能…

Android系统定制APP开发_如何对应用进行系统签名

前言 当项目开发需要使用系统级别权限或frame层某些api时,普通应用是无法使用的,需要在AndroidManifest中配置sharedUserId: AndroidManifest.xml中的android:sharedUserId“android.uid.system”,代表的意思是和系统相同的uid&a…

【MySQL】DATEDIFF()函数使用

DATEDIFF 函数用于计算两个日期之间的差值,以天为单位 DATEDIFF 函数返回一个整数,表示 date1 和 date2 之间的天数。如果 date1 在 date2 之前,结果为负数;如果在 date2 之后,结果为正数;如果相等&#xf…

yum系统报错:SyntaxError: multiple exception types must be parenthesized

执行yum相关步骤报错如下: File "/usr/bin/yum", line 30except KeyboardInterrupt, e:^^^^^^^^^^^^^^^^^^^^ SyntaxError: multiple exception types must be parenthesized原因:python解释器版本错误,yum运行版本为python 2.7&am…

MapReduce完整工作流程

1、mapreduce工作流程(终极版) 0. 任务提交 1. 拆-split逻辑切片--任务切分。 FileInputFormat--split切片计算工具 FileSplit--单个计算任务的数据范围。 2. 获得split信息和个数。 MapTask阶段 1. 读取split范围内的数据。k(偏移量)-v(行数据) 关键API:TextI…

毕业项目推荐:基于yolov8/yolov5/yolo11的动物检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

了解Node.js

Node.js是一个基于V8引擎的JavaScript运行时环境,它允许JavaScript代码在服务器端运行,从而实现后端开发。Node.js的出现,使得前端开发人员可以利用他们已经掌握的JavaScript技能,扩展技能树并成为全栈开发人员。本文将深入浅出地…

MAC上安装Octave

1. 当前最新版Octave是9.3版本,需要把mac os系统升级到14版本(本人之前的版本是10版本) https://wiki.octave.org/Octave_for_macOS octave的历史版本参考此文档:Octave for macOS (outdated) - Octavehttps://wiki.octave.org/Oc…

矩阵求逆的几种方式

矩阵求逆的几种方式(以二阶为例) 矩阵求逆的方法有多种,以下是常用的几种方式总结: 1. 行列式公式法 这是最常见的方法,适用于 2 2 2 \times 2 22矩阵。 对于矩阵: Φ [ a b c d ] , \Phi \begin{bma…

【优选算法篇】:深入浅出位运算--性能优化的利器

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:优选算法篇–CSDN博客 文章目录 一.位运算一.位运算概述二.常见的位运算操作符三.常见的位运…

每日十题八股-2025年1月12日

1.为什么四次挥手之后要等2MSL? 2.服务端出现大量的timewait有哪些原因? 3.TCP和UDP区别是什么? 4.TCP为什么可靠传输 5.怎么用udp实现http? 6.tcp粘包怎么解决? 7.TCP的拥塞控制介绍一下? 8.描述一下打开百度首页后发生的网络过…