
Python办公自动化是利用Python脚本和程序简化、加速日常办公任务的过程。
openpyxl和pandas库进行读写、格式调整、图表生成等。python-docx创建/编辑文档,docxtemplater填充模板。ReportLab创建动态PDF。PyPDF2提取文本内容。zipfile和rarfile库处理ZIP/RAR文件的压缩与解压。os、shutil、pathlib实现文件/文件夹的创建、复制、删除等。requests+Beautiful Soup抓取网页数据,Scrapy处理复杂爬取任务。pandas处理CSV/Excel数据(去重、缺失值填充、格式转换)。re模块)进行文本匹配与提取。matplotlib、seaborn、plotly生成图表(折线图、柱状图等)。smtplib发送邮件,pywin32或Microsoft Graph API集成Outlook。boto3)管理资源。Tweepy自动化Twitter操作。subprocess模块执行命令行操作。pyautogui模拟鼠标/键盘输入(需结合VNC/RDP协议)。ping3检查主机状态,socket检测端口可用性。ftplib实现文件上传/下载。sqlite3、pyodbc(SQL Server)、cx_Oracle等。pymongo(MongoDB)、redis等。shutil或云存储API(如AWS S3)实现自动化备份。pydub剪辑音频,moviepy处理视频。OpenCV、Pillow实现人脸识别、滤镜添加等。SpeechRecognition进行语音识别,gTTS实现文本转语音。pytest框架编写测试用例,集成CI/CD流程。cryptography库对文件进行加密/解密。schedule库或系统工具(cron/任务计划程序)定期执行脚本。ReportLab动态生成PDF报告。功能领域 | 常用库/工具 |
|---|---|
文件处理 | pandas, openpyxl, python-docx, PyPDF2, zipfile |
网络与通信 | requests, smtplib, Tweepy, pywin32 |
云服务与API集成 | boto3 (AWS), google-api-python-client, azure-storage-blob |
数据可视化 | matplotlib, seaborn, plotly |
系统自动化 | subprocess, pyautogui, schedule |
数据库操作 | sqlite3, pymysql, pymongo, cx_Oracle |
音视频与图像 | OpenCV, Pillow, pydub, moviepy |
需求:每月汇总 100 个分表 → 总表 + 柱状图 + 条件格式
# 01_excel_report.py
from pathlib import Path
import pandas as pd
from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.styles import PatternFill
df_list = [pd.read_excel(f) for f in Path("parts").glob("*.xlsx")]
total = pd.concat(df_list, ignore_index=True)
wb = load_workbook("template.xlsx")
ws = wb.active
# 写入数据
for r in total.itertuples(index=False):
ws.append(r)
# 添加图表
chart = BarChart()
chart.title = "销售额"
chart.y_axis.title = "万元"
data = Reference(ws, min_col=3, min_row=1, max_row=ws.max_row)
cats = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "F2")
# 条件格式
red_fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE", fill_type="solid")
for cell in ws["C"][1:]:
if cell.value < 0:
cell.fill = red_fill
wb.save("月度汇总.xlsx")# 02_word_mail_merge.py
from docxtpl import DocxTemplate
import pandas as pd
df = pd.read_excel("合同信息.xlsx")
tpl = DocxTemplate("合同模板.docx")
for _, row in df.iterrows():
context = row.to_dict()
tpl.render(context)
tpl.save(f"输出/合同_{row['编号']}.docx")# 03_pdf_watermark.py
from PyPDF2 import PdfWriter, PdfReader
writer = PdfWriter()
reader = PdfReader("input.pdf")
watermark = PdfReader("watermark.pdf").pages[0]
for page in reader.pages:
page.merge_page(watermark)
writer.add_page(page)
writer.encrypt("123456")
writer.write("output_watermark.pdf")# 04_send_mail.py
import smtplib, ssl
from email.message import EmailMessage
import pandas as pd
df = pd.read_excel("通讯录.xlsx")
passwd = os.getenv("MAIL_PASS") # 安全!
for _, row in df.iterrows():
msg = EmailMessage()
msg["Subject"] = "月度报表"
msg["From"] = "robot@company.com"
msg["To"] = row["邮箱"]
msg.set_content("请查收附件")
with open("月度汇总.xlsx", "rb") as f:
msg.add_attachment(f.read(), maintype="application", subtype="vnd.ms-excel", filename="汇总.xlsx")
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.company.com", 465, context=context) as smtp:
smtp.login("robot@company.com", passwd)
smtp.send_message(msg)# 05_spider_to_excel.py
import requests, pandas as pd
from bs4 import BeautifulSoup
url = "https://quotes.toscrape.com"
rows = []
for page in range(1, 6):
soup = BeautifulSoup(requests.get(f"{url}/page/{page}").text, "lxml")
for quote in soup.select(".quote"):
rows.append({
"名言": quote.select_one(".text").text,
"作者": quote.select_one(".author").text,
"标签": ",".join([t.text for t in quote.select(".tag")])
})
pd.DataFrame(rows).to_excel("名言.xlsx", index=False)# 06_db_sync.py
import sqlalchemy as sa
import pandas as pd
engine = sa.create_engine("mysql+pymysql://user:pass@ip:3306/db")
# Excel → MySQL
df = pd.read_excel("staff.xlsx")
df.to_sql("staff", engine, if_exists="replace", index=False)
# MySQL → Excel
df2 = pd.read_sql("SELECT * FROM salary WHERE month = '2024-06'", engine)
df2.to_excel("salary_202406.xlsx", index=False)# 07_video_subtitle.py
from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
import pandas as pd
video = VideoFileClip("input.mp4")
df = pd.read_excel("subtitle.xlsx") # 列:start,end,text
clips = [video]
for _, r in df.iterrows():
txt = TextClip(r["text"], font="SimHei", fontsize=24, color="white", bg_color="black")
txt = txt.set_position(("center", "bottom")).set_start(r["start"]).set_end(r["end"])
clips.append(txt)
CompositeVideoClip(clips).write_videofile("output_sub.mp4", codec="libx264")# 08_img_batch.py
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont
for f in Path("imgs").rglob("*.jpg"):
img = Image.open(f)
img.thumbnail((1200, 1200)) # 压缩
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("msyh.ttc", 36)
draw.text((img.width - 200, img.height - 50), "水印", font=font, fill="red")
img.save(f"out/{f.name}", quality=85)# 09_s3_upload.py
import boto3, os, tqdm
s3 = boto3.client("s3")
bucket = "company-report"
files = [f for f in os.listdir("reports") if f.endswith(".xlsx")]
for f in tqdm.tqdm(files):
s3.upload_file(f"reports/{f}", bucket, f"2024/{f}")# 10_cli.py
import typer
from pathlib import Path
import pandas as pd
app = typer.Typer()
@app.command()
def merge(input_dir: Path, output: Path):
dfs = [pd.read_excel(f) for f in input_dir.glob("*.xlsx")]
pd.concat(dfs).to_excel(output, index=False)
typer.echo(f"已合并 {len(dfs)} 个文件 → {output}")
if __name__ == "__main__":
app()打包:
pip install pyinstaller
pyinstaller -F 10_cli.py -n excel_merge
./dist/excel_merge merge ./parts ./月度汇总.xlsxPython通过简洁的代码和强大的生态库解决办公场景中的各类问题,适用于行政、财务、数据分析等需处理大量日常任务的场景,核心价值在于:
typer + pyinstaller 一键生成命令行工具,行政/财务/数据分析同学也能 exe 双击使用。“无他,惟手熟尔”!有需要的用起来。
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!