人人都会AI编程

29.1 自动化脚本:批量文件处理、数据清洗、报表生成

更新时间:2026-07-12

自动化脚本是 Python 最接地气的应用场景。日常工作中大量重复、耗时、易出错的手工操作,都可以用几十行 Python 脚本替换掉,而且脚本写完能反复用,边际成本几乎为零。下面以三个最常见的典型需求,给出直接可用的思路和代码骨架。


批量文件处理

场景:把某个文件夹下所有 .txt 文件重命名为 .md,或者把一堆按日期命名的日志文件归类到按月建立的子目录中。

基础工具os / shutil / pathlibpathlib 面向对象,写路径操作更直观,推荐优先使用。

示例:批量重命名文件后缀

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 报表:用 openpyxlxlsxwriter 在 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 传入日期参数),并接入定时任务(如 cronAPScheduler),实现全自动生成和邮件分发。

总结:批量文件处理、数据清洗、报表生成这三个场景覆盖了职场自动化的大部分需求。它们的共同模式是:用 Python 的标准库加一两个主力第三方库,先把手工操作步骤翻译成代码,再逐步完善异常处理和参数化,最终打磨成一个可靠、可复用的工具。这样的脚本不仅省时,还让你从重复劳动中抽身,投入到更有创造性的工作中。