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

Python 自动化接单实战(二):Excel 批量清洗如何把规则与异常分开 客户说“整理一下 Excel”背后往往同时包含改列名、去空格、金额转换、重复行处理和异常留痕。真正可交付的脚本不能把坏数据悄悄丢掉也不能让一处格式变化拖垮整批文件。这一篇延续前两篇的配置驱动思路先把输入统一成行记录再让规则函数返回“结果或错误”最后分别输出干净数据与异常报告。示例使用标准库 CSV接入 Excel 时只需替换读写适配层。一、先定义不会含糊的验收规则假设订单至少需要order_id、amount和customer。金额必须非负订单号不能为空同一个订单号重复出现时保留第一条并把其余记录写入异常文件。fromdecimalimportDecimal,InvalidOperationdefclean(row):order_idrow.get(order_id,).strip()customerrow.get(customer,).strip()ifnotorder_id:raiseValueError(missing order_id)try:amountDecimal(row.get(amount,).replace(,,).strip())exceptInvalidOperationasexc:raiseValueError(invalid amount)fromexcifamount0:raiseValueError(negative amount)return{order_id:order_id,customer:customer,amount:str(amount)}规则函数不负责打印也不直接写文件因此可以独立测试。客户修改金额约束时只改这一层。二、让每条失败记录都能回到原始位置importcsv seen,accepted,rejectedset(),[],[]withopen(orders.csv,encodingutf-8-sig,newline)assource:forline_no,rowinenumerate(csv.DictReader(source),start2):try:itemclean(row)ifitem[order_id]inseen:raiseValueError(duplicate order_id)seen.add(item[order_id])accepted.append(item)exceptValueErrorasexc:rejected.append({line:line_no,reason:str(exc),**row})print(faccepted{len(accepted)}rejected{len(rejected)})输出示例accepted248 rejected7交付时还应把accepted和rejected分别写入文件并在异常报告中保留源文件名、行号和原因。这样客户可以修正 7 条数据后重跑而不是重新核对 255 行。三、批量目录要有明确停止条件先用 2—3 个脱敏文件验证列名、编码和日期格式再扩展到整个目录。若必填列缺失应停止当前文件若只是单行金额错误则隔离该行并继续。规则不明确时先补样例不要凭经验猜客户意图。 本文把表格清洗拆成规则函数、正常输出和异常报告让批量处理既能继续执行也能逐条追溯。 你的 Excel 清洗任务里最容易反复变化的是列名、日期、金额还是去重规则 关注《Python 自动化接单实战》下一篇继续拆解公开网页文本抓取器的范围控制、规则检查与结构化输出。参考来源Dev.toContext Is KingHacker NewsIntroduction to Data-Oriented Design