自动化脚本是 Python 最接地气的应用场景。日常工作中大量重复、耗时、易出错的手工操作,都可以用几十行 Python 脚本替换掉,而且脚本写完能反复用,边际成本几乎为零。下面以三个最常见的典型需求,给出直接可用的思路和代码骨架。
批量文件处理
场景:把某个文件夹下所有 .txt 文件重命名为 .md,或者把一堆按日期命名的日志文件归类到按月建立的子目录中。
基础工具:os / shutil / pathlib。pathlib 面向对象,写路径操作更直观,推荐优先使用。
示例:批量重命名文件后缀
from pathlib import Path
folder = Path("./documents")
for file in folder.glob("*.txt"):
new_name = file.with_suffix(".md")
file.rename(new_name)
print(f"重命名: {file.name} -> {new_name.name}")
要点:
Path.glob()支持通配符,可以精确筛选文件。rename()直接修改原文件,如果要保留备份,可以先复制。- 批量操作前,建议先打印目标列表确认无误,或者加个简单计数器限制执行数量。
示例:按月份归档日志文件
from pathlib import Path
import shutil
log_dir = Path("./logs")
archive_base = Path("./archive")
for log_file in log_dir.glob("2024-*.log"):
# 假设文件名如 2024-03-15.log
month = log_file.stem[:7] # "2024-03"
target_dir = archive_base / month
target_dir.mkdir(parents=True, exist_ok=True)
shutil.move(str(log_file), target_dir / log_file.name)
防坑提示:
- 跨分区移动文件时
Path.rename()可能失败,用shutil.move()更稳妥。 - 操作前一定要在测试目录或小范围数据上验证脚本逻辑,避免误删、误改名。
数据清洗
场景:从上游系统导出的 CSV 或 Excel 文件,总带着空行、重复值、异常数据,需要洗成干净规整的格式再导入数据库。
核心工具:pandas。几乎所有清洗任务都能用 DataFrame 的链式操作完成。
典型清洗流水线:
import pandas as pd
# 1. 读取数据
df = pd.read_csv("sales_raw.csv", encoding="utf-8")
# 2. 统一列名(去空格、小写)
df.columns = df.columns.str.strip().str.lower()
# 3. 处理缺失值
df["price"] = df["price"].fillna(0)
df = df.dropna(subset=["order_id"]) # 订单号缺失则整行删除
# 4. 删除重复行
df = df.drop_duplicates(subset=["order_id"])
# 5. 数据类型修正
df["order_date"] = pd.to_datetime(df["order_date"])
# 6. 异常值过滤(单价大于0)
df = df[df["price"] > 0]
# 7. 写出清洗后数据
df.to_csv("sales_cleaned.csv", index=False)
实用技巧:
- 用
df.describe()和df.info()快速查看数据概况,定位脏数据。 - 字符串列的清洗可以配合
df["name"].str.strip().str.lower()链式调用。 - 清洗逻辑写清楚后,可以封装成一个函数,供多个文件重复调用。
防坑提示:
- 大文件(几百 MB以上)直接用
pandas可能吃光内存,此时可用chunksize参数分块读取逐步处理。 - Excel 文件日期列有时会读成数字,必须手动用
pd.to_timedelta或指定parse_dates。
报表生成
场景:每月需拉取业务数据,生成包含表格和统计图的分析报告,格式通常是 Excel 或 PDF。
推荐方案:
- Excel 报表:用
openpyxl或xlsxwriter在 Python 中直接写 Excel,可自由设置格式、图表。 - PDF 报表:用
ReportLab生成纯 PDF,或者用Jinja2渲染 HTML 模板再通过pdfkit/WeasyPrint转为 PDF(样式更可控)。 - 快捷可视化报表:
pandas自带to_excel()可以输出数据到 Excel,配合matplotlib生成图表后插入 Excel。
示例:生成带图表的 Excel 月报
import pandas as pd
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.utils.dataframe import dataframe_to_rows
# 假设已经拿到月度汇总数据 df_summary
df_summary = pd.DataFrame({
"产品": ["A", "B", "C"],
"销售额": [120000, 95000, 78000]
})
wb = Workbook()
ws = wb.active
ws.title = "月度销售报告"
# 写入数据
for r in dataframe_to_rows(df_summary, index=False, header=True):
ws.append(r)
# 添加柱状图
chart = BarChart()
data = Reference(ws, min_col=2, min_row=1, max_row=len(df_summary)+1)
cats = Reference(ws, min_col=1, min_row=2, max_row=len(df_summary)+1)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.title = "月度销售额"
chart.y_axis.title = "元"
ws.add_chart(chart, "E2")
wb.save("月报_2024年3月.xlsx")
生成 HTML 再转 PDF 的轻量方案(适合排版美观的报告):
from jinja2 import Template
import pdfkit
html_template = """
<h1>月度报告</h1>
<table border="1">
<tr><th>产品</th><th>销售额</th></tr>
{% for item in data %}
<tr><td>{{ item.product }}</td><td>{{ item.sales }}</td></tr>
{% endfor %}
</table>
"""
template = Template(html_template)
html_out = template.render(data=[{"product":"A","sales":120000},{"product":"B","sales":95000}])
pdfkit.from_string(html_out, "report.pdf")
实用建议:
- 报表的样式和布局先和需求方确认,用 HTML 做报表的好处是前端同学可以帮你调 CSS。
- 定期生成的报表最好做成可配置的脚本(通过
argparse传入日期参数),并接入定时任务(如cron或APScheduler),实现全自动生成和邮件分发。
总结:批量文件处理、数据清洗、报表生成这三个场景覆盖了职场自动化的大部分需求。它们的共同模式是:用 Python 的标准库加一两个主力第三方库,先把手工操作步骤翻译成代码,再逐步完善异常处理和参数化,最终打磨成一个可靠、可复用的工具。这样的脚本不仅省时,还让你从重复劳动中抽身,投入到更有创造性的工作中。