Python 自动化接单实战(二):Excel 批量清洗如何把规则与异常分开

客户说"整理一下 Excel",背后往往同时包含改列名、去空格、金额转换、重复行处理和异常留痕。真正可交付的脚本不能把坏数据悄悄丢掉,也不能让一处格式变化拖垮整批文件。

这一篇延续前两篇的配置驱动思路:先把输入统一成行记录,再让规则函数返回"结果或错误",最后分别输出干净数据与异常报告。示例使用标准库 CSV,接入 Excel 时只需替换读写适配层。

一、先定义不会含糊的验收规则

假设订单至少需要 order_id、amount 和 customer。金额必须非负,订单号不能为空;同一个订单号重复出现时,保留第一条并把其余记录写入异常文件。

python 复制代码
from decimal import Decimal, InvalidOperation

def clean(row):
    order_id = row.get("order_id", "").strip()
    customer = row.get("customer", "").strip()
    if not order_id:
        raise ValueError("missing order_id")
    try:
        amount = Decimal(row.get("amount", "").replace(",", "").strip())
    except InvalidOperation as exc:
        raise ValueError("invalid amount") from exc
    if amount < 0:
        raise ValueError("negative amount")
    return {"order_id": order_id, "customer": customer, "amount": str(amount)}

规则函数不负责打印,也不直接写文件,因此可以独立测试。客户修改金额约束时,只改这一层。

二、让每条失败记录都能回到原始位置

python 复制代码
import csv

seen, accepted, rejected = set(), [], []
with open("orders.csv", encoding="utf-8-sig", newline="") as source:
    for line_no, row in enumerate(csv.DictReader(source), start=2):
        try:
            item = clean(row)
            if item["order_id"] in seen:
                raise ValueError("duplicate order_id")
            seen.add(item["order_id"])
            accepted.append(item)
        except ValueError as exc:
            rejected.append({"line": line_no, "reason": str(exc), **row})

print(f"accepted={len(accepted)} rejected={len(rejected)}")

输出示例:

text 复制代码
accepted=248 rejected=7

交付时还应把 accepted 和 rejected 分别写入文件,并在异常报告中保留源文件名、行号和原因。这样客户可以修正 7 条数据后重跑,而不是重新核对 255 行。

三、批量目录要有明确停止条件

先用 2---3 个脱敏文件验证列名、编码和日期格式,再扩展到整个目录。若必填列缺失,应停止当前文件;若只是单行金额错误,则隔离该行并继续。规则不明确时先补样例,不要凭经验猜客户意图。


📌 本文把表格清洗拆成规则函数、正常输出和异常报告,让批量处理既能继续执行,也能逐条追溯。

💬 你的 Excel 清洗任务里,最容易反复变化的是列名、日期、金额还是去重规则?

👉 关注《Python 自动化接单实战》,下一篇继续拆解公开网页文本抓取器的范围控制、规则检查与结构化输出。

参考来源

相关推荐
进击的明明4 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
全栈弄潮儿4 小时前
Python实战第8期:函数
后端·python·编程语言
卷无止境6 小时前
暗流与破局:AI时代的代码安全审查工具全景指南
后端·python
卷无止境9 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
众壹新能源科技10 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
滴啦嘟啦哒10 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
全栈练习生11 小时前
AI安全与红队测试
python·ai
费曼学习法11 小时前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维
鸽鸽程序猿11 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
NetX行者11 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python