做了几年数据运营,我大部分的加班时间都耗在了一种事上:收表、对表、拆表、合表。每个月末,各个业务线交上来的Excel五花八门,有的多了几行表头,有的把日期列填成了文本,有的金额列里混着不可见字符。最早我靠手动复制粘贴,一张一张处理,四五个小时就没了,一抬头天都黑了。后来我开始把能自动化的流程全部写成脚本,从合并报表到格式清洗,从指标汇总到定时跑批,一次性处理几十张表,基本稳定在几分钟内出结果。这篇文章就把我日常处理表格自动化时最常用的思路、工具选型和完整脚本拆开讲清楚。
日常重复表格处理自动化,说穿了就一句话:把固定规则交给代码,让人只处理异常。它解决的不是高深的算法问题,而是那些每个月底都会出现、规则固定但数据量大的脏活累活。适合的读者也很明确:运营、财务、人事、数据分析师,以及任何需要跟Excel打交道但又不想被Excel绑架的人。你不需要是编程高手,能安装Python、能看懂最基础的脚本结构,就足够上手。
1. 动手前先想清楚:什么样的表格处理适合自动化
决定写脚本之前,最好先停一下,把手里的表格处理流程盘一盘。我在前几次写自动化脚本时踩过最大的坑,就是没区分哪些任务值得自动化、哪些任务自动化了反而更麻烦。说白了,自动化不是万能的,它只适合满足特定特征的工作。
1.1 重复性任务的三个特征
我判断一个表格任务适不适合自动化,主要看三个特征。
第一,规则明确。什么叫规则明确?就是你不需要看数据内容就能决定怎么处理。比如“合并所有分表”“删除金额列中的千分位逗号”“把日期列统一成YYYY-MM-DD格式”,这些是规则。但“根据业务逻辑判断这张表要不要并入汇总”这种模糊判断,不适合写死在脚本里,适合让人看一眼决定。
第二,频率高。每天、每周、每月都要做一次的,自动化价值最大。比方说每天早上要拉前一天各渠道的销售数据,做成日报发出去。这种日更任务,手动做一次可能只要十分钟,但一个月就是三百分钟,一年就是六十个小时,写脚本花一两个小时完全划算。反过来,那种一年只做一次、数据格式还很奇怪的临时任务,脚本写完了任务也结束,收益就很低。
第三,数据量大或源文件多。这也是决定自动化价值的关键因素。你合并三个表,手动三分钟也就完了,不值得折腾脚本。但如果一次要合并三十个门店的表、每个表还有十几列,那手动汇总不仅慢,还特别容易漏行、漏列。这种情况下,脚本的稳定性优势就非常明显——它不会因为连续归纳整理两个小时后走神而漏掉一行。
1.2 方案选型:Python、Excel VBA、RPA 怎么选
这可能是很多人最容易纠结的地方。我不是程序员出身,早期也试过Excel自带的VBA,后来因为要处理的表越来越多,才转向Python。现在我的建议是这样的,可以按场景选。
如果你的所有操作都在同一个Excel工作簿内,不做跨文件处理,也不需要和外部系统做数据交换,那VBA其实够用。Excel内置的宏录制功能还能把操作过程生成代码,学习成本低,改动也方便。
但如果你像我一样,每天要面对一堆散落在不同文件夹里的Excel文件,或者还要做数据筛选、去重、统计、合并之后发给别人,那我建议直接用Python。Python生态里有pandas和openpyxl这两个库,几乎覆盖了我日常遇到的全部表格处理需求。pandas擅长批量处理和计算,openpyxl擅长保留原格式、调整单元格样式。两个搭配用,基本是万能组合。
还有一个选项是RPA(机器人流程自动化)。如果你的表格处理流程还要牵扯到登录网页、点击系统、下载文件这类鼠标键盘操作,那RPA确实比Python更直接。但单就表格处理本身而言,RPA属于“杀鸡用了牛刀”,而且很多RPA工具收费不便宜,学习曲线也不比Python平缓。我自己只在需要操作老旧业务系统时才会考虑RPA,纯表格处理的场景基本不碰。
2. 核心细节解析:选对工具与关键参数
很多人写表格处理脚本时,第一个卡住的地方不是逻辑,而是工具。这里的工具不光指语言和库,还指“用什么方式去读写文件”以及“怎么处理脏数据”。这一节我把最核心的细节拆出来讲,都是实际使用中验证过的东西。
2.1 pandas 和 openpyxl 的分工
先理清楚pandas和openpyxl的区别,这决定了你脚本的稳定性和速度。
pandas是一个数据分析库,处理表格数据的核心逻辑是DataFrame,你可以把它理解成一张“加强版Excel表”。它的强项是数据操作:筛选、排序、分组、聚合、连接、去重,这些操作写起来就一两行。但也正因为pandas专注于数据本身,它对Excel格式的控制非常有限。用pandas直接生成的Excel文件,单元格没有颜色、列宽是默认宽度、表头不带粗体,拿出去交付不太好看。
openpyxl是专门读写Excel文件(.xlsx格式)的库。它可以精确地设置单元格的字体、颜色、边框、列宽、行高,甚至可以操作图表。但它的缺点也很明显:没有pandas那种流式的数据筛选和聚合能力,你如果要用原生openpyxl去合并统计几百张表,写起来会非常痛苦。
所以我的通用方案是分工协作:先用pandas读取数据、清洗数据、统计汇总,得到一个最终的DataFrame,再用openpyxl把这些数据写入一个预设好格式的Excel模板里。这样既享受pandas的高效处理,又能保证输出的表格美观、可以直接交给领导。
对于数据量不大、格式又要求极高的场景,比如生成最终交付给客户的报表,还有一种方案:直接用openpyxl读取源文件并逐单元格操作。这种方式最灵活,但代码量也会上去,适合格式调整的最终冲刺,不适合批量处理。
2.2 路径与文件框架的处理
脚本写得好不好,一个关键点在路径处理上。我最开始写自动化脚本时,直接硬编码文件路径,比如C:/Users/admin/Desktop/门店报表/1月.xlsx。结果次月换了个文件夹,脚本就报错,得改代码,非常麻烦。
后来我养成了一个习惯:永远把路径处理写成“相对路径 + 自动获取文件名”的框架。具体来说,用pathlib库来管理路径,这样不管文件放在哪,只要保持目录结构一致,脚本就能正常工作。
2.3 数据清洗的关键参数
日常操作中最常遇到的问题,就是源数据不够干净。比如金额列被Excel识别成了文本,数字旁边带着单位;再比如同一列里混着“2024/1/1”和“2024-01-01”两种格式;还有表头不统一、有全角空格、有统计说明行混在数据中间。这些脏数据如果不处理,合表后统计出来的结果一定错。
在处理这类问题时,我比较依赖pandas的几个关键参数。比如读取Excel时加dtype参数,指定某些列以字符串格式读取而不是自动推断数据类型。再比如对金额列做清洗时,用pd.to_numeric配合errors="coerce",无法转换的值会自动变成NaN,之后再集中处理。日期列的处理我会额外讲,因为这块是重灾区。
2.4 日期与数值的规范底线
日期处理是表格自动化里最容易出错、也最需要统一规则的地方。我见过太多案例:两张表里日期字段格式不同,合并后排序完全错乱;日期以文本形式存在,Excel里的筛选和透视表都没法正常识别;还有日期时间戳被程序识别成数字,显示成44652这种神秘数字。
我的处理原则很固定——不管源表里是什么格式,进入统一流程前先强制转成日期类型,再统一格式输出。用pd.to_datetime转的时候,记得加参数format尽量指定,或者用errors="coerce"兜底,避免某些异常值让整个脚本报错中断。
数值清洗也有几条底线:去除千分位逗号、去除货币符号、去掉不可见字符(比如\u00a0不间断空格),这些都建议在处理流程里做。数值列清洗完之后一定要重新检查数据类型,确保是数值型。这一步又简单又关键,因为在pandas里,字符串和数值型虽然都叫“数据”,但操作逻辑完全不同。
3. 实操过程与核心环节实现
这一部分我直接用三个我在工作中反复用的场景来讲,从简单到复杂,每个场景都给出可复制的核心代码和实现思路。
3.1 场景一:合并十几个门店的日报表到一个总表
假设我有这样一个业务场景:每天各门店会发来一份固定格式的Excel,列名是“门店”“日期”“销售额”“订单数”“退款额”。我需要把这些表全部合并到一张总表里,并自动加一列“净销售额”(销售额减去退款额),最终保存成“门店汇总日报.xlsx”。
这种场景的关键点在于:源文件数量会变,今天可能是15个门店,明天可能是18个,所以脚本一定要自动发现所有文件,而不是写死文件名。我通常的做法是:把所有日报放在一个文件夹里,脚本读取该文件夹下所有的xlsx文件,逐个读入,再用pandas的concat函数上下拼接。
脚本实现如下:
import pandas as pd from pathlib import Path # 所有报表所在的文件夹 folder = Path("./daily_reports") # 匹配文件夹下所有 xlsx 文件(不含临时文件 ~$开头的) files = [f for f in folder.glob("*.xlsx") if not f.name.startswith("~$")] if not files: print("没有找到任何 Excel 文件,请检查文件夹路径") exit() df_list = [] for f in files: # read_excel 会自动识别表头,sheet_name=0 表示读取第一个 sheet temp_df = pd.read_excel(f, sheet_name=0) # 非空校验 if temp_df.empty: print(f"警告:{f.name} 是空表,已跳过") continue df_list.append(temp_df) # 合并所有 DataFrame,ignore_index=True 会重新生成行号 merged_df = pd.concat(df_list, ignore_index=True) # 数据清洗:把金额列统一转成数值 merged_df["销售额"] = ( merged_df["销售额"] .astype(str) .str.replace(",", "", regex=False) .astype(float) ) merged_df["退款额"] = ( merged_df["退款额"] .astype(str) .str.replace(",", "", regex=False) .astype(float) ) # 新增“净销售额”列 merged_df["净销售额"] = merged_df["销售额"] - merged_df["退款额"] # 输出合并结果 merged_df.to_excel("门店汇总日报.xlsx", index=False) print(f"合并完成,共 {len(merged_df)} 行数据")这段脚本背后的思路很简单:先把全部数据读进来,然后做统一清洗,最后输出成一个文件。我在实际跑的时候,最常遇到的一个坑是:某个门店发来的表里,“退款额”列可能是空列,没有填数字,这时候astype(float)不会报错,但转换后全是NaN,后续计算“净销售额”时结果就全是缺失值。所以我的习惯是,转换完成后立刻加一个校验:
print(merged_df[["销售额", "退款额", "净销售额"]].describe())看下最大值、最小值、缺失值的数量,如果发现异常再倒回去查是哪张表出了问题。这样比所有数据合并完直接交出去要稳得多。
3.2 场景二:批量整理表格的格式与内容
第二个高频场景是:源表本身不太脏,但格式根本不统一,有的是xlsx,有的是xls,有的列名大小写不一致,有的日期列是文本。我需要把它们统一成一个标准格式,再输出。
这里我发现一个重要的经验:直接改源表风险很大,万一误操作把原表破坏了,数据找回很麻烦。所以我从不在原表上修改,而是统一读入内存处理后,输出到新的“整理结果”文件夹。原表保持原样,脚本随便跑。
格式统一的操作包括:统一表头列名,统一日期格式,统一金额格式,去掉多余的空白行。这里用到一个技巧:读取Excel文件时,pandas会把首行自动识别为表头,但如果源表有合并单元格,就会产生奇奇怪怪的列名。处理方式是header=0,必要时用skiprows参数跳过前面的杂行。
脚本示例:
import pandas as pd from pathlib import Path raw_folder = Path("./raw_files") result_folder = Path("./formatted_files") result_folder.mkdir(exist_ok=True) # 标准列名映射:源表可能的列名 -> 标准列名 col_mapping = { "门店名称": "门店", "店名": "门店", "store": "门店", "日期": "日期", "data": "日期", "销售额(元)": "销售额", "销售金额": "销售额", "退款金额": "退款额", } for f in raw_folder.glob("*.*"): if f.suffix.lower() not in [".xlsx", ".xls"]: continue # 读取时跳过前3行(因为源表开头有标题说明文字) df = pd.read_excel(f, skiprows=3) df = df.rename(columns=col_mapping) # 只保留标准列 keep_cols = ["门店", "日期", "销售额", "退款额"] df = df[[c for c in keep_cols if c in df.columns]] # 日期统一转成字符串,格式 yyyy-mm-dd df["日期"] = pd.to_datetime(df["日期"], errors="coerce").dt.strftime("%Y-%m-%d") # 去空白行 df = df.dropna(how="all") # 输出到整理好的文件夹 out_path = result_folder / f.name df.to_excel(out_path, index=False) print(f"已整理:{f.name},共 {len(df)} 行")这里有几个参数细节值得说明。skiprows=3不是拍脑袋写的,是我打开源文件后先肉眼观察,发现前3行都是大标题、说明文字、空行,第4行才是真正的表头,所以跳过了前3行。不同源文件可能需要不同的skiprows值,所以我一般会在读取后先print(df.head())确认表头是否正确,再继续后续操作。
errors="coerce"这个参数很好用,日期转不了就变成NaT(缺失时间),不会让脚本中断。最后用dropna(how="all")把整行都为空的记录清掉。这一步非常关键,因为很多Excel里的“看起来空白的行”,其实是带格式的,如果不清理,后面做数据分析时会出现一堆全空的行,影响统计。
3.3 场景三:拆分总表成多个分表
前面的场景都是“分散到合并”,第三个相反——把一张总表拆分到多个分表。比如有一张全国门店的销售明细总表,按“城市”列拆成不同的Excel文件;或者按“月份”拆分成多个sheet。
拆分的思路也简单:先用pandas的groupby按某个字段分组,再逐组写入文件。如果用户希望分表放在同一个工作簿的不同sheet里,就用pd.ExcelWriter配合sheet_name参数;如果希望一个文件一个sheet,就循环输出到单独文件。
脚本示例:
import pandas as pd df = pd.read_excel("全国门店销售明细.xlsx") # 按城市拆分到不同 Excel 文件 city_groups = df.groupby("城市") with pd.ExcelWriter("按城市拆分.xlsx") as writer: for city, group in city_groups: # 去掉 sheet 名中的特殊字符 sheet_name = str(city).replace("/", "-")[:31] group.to_excel(writer, sheet_name=sheet_name, index=False) print(f"已写入城市「{city}」,共 {len(group)} 行")这段脚本有一个规范细节值得注意。Excel对sheet名称有长度限制(31个字符)和非法字符限制(不能包含/\?*[]:)。如果城市名里恰好包含了这些字符,写入时就会报错。所以我在写sheet名时加了一步replace("/", "-")[:31],这属于从实际报错里总结出来的经验。你自己跑别的拆分字段时,也建议加上类似的清洗动作。
3.4 场景四:一键定时跑批
自动化脚本写完,不代表流程就自动了。如果你每天都要跑一次合并报表,不可能每次都手动打开终端执行脚本。更优雅的方案是:用系统的任务计划程序定时运行脚本。在Windows上叫“任务计划程序”,在macOS上叫“crontab”或“launchd”。
我用的是Windows下的任务计划程序,设置方式分三步:
第一步,把脚本保存成.py文件,并用命令行验证能否通过python直接运行。这里有个小坑:如果系统里装了多个Python版本,直接双击运行可能找不到环境变量,我建议用一个完整的路径绝对调用。
第二步,在任务计划程序里新建任务,“触发器”设置为每天固定的时间,比如早上8点;“操作”设置为“启动程序”,程序填python.exe的完整路径,参数填脚本的完整路径。
第三步,在脚本开头加上日志输出,把每次运行的结果写到一个log文件里。这样第二天打开电脑一看日志,就知道昨晚的汇总有没有跑成功。没有日志的定时任务,等于没有监控的定时炸弹。
加日志的脚本片段:
from datetime import datetime log_message = f"{datetime.now():%Y-%m-%d %H:%M:%S} 合并完成,共 {len(merged_df)} 行" with open("report.log", "a", encoding="utf-8") as log_file: log_file.write(log_message + "\n")这个日志看起来简单,但在实际工作里帮了我大忙。有一次任务计划程序跑失败了,我用日志一查,发现是某个门店的表文件名带了中文括号,导致glob通配符没匹配到文件。没有日志的话,我根本不知道脚本在哪一步出了错。
4. 常见问题与排查技巧实录
表格处理自动化的脚本,写出来之后一定会遇到各种问题,尤其是跑别人的表、数据不规范的时候。这一节我把高频问题整理成一个排查速查表,再分享几个我摸索出来的独家经验。
4.1 高频报错与处理方案
| 问题现象 | 常见原因 | 处理方案 |
|---|---|---|
FileNotFoundError | 路径写错或文件不在预期位置 | 先检查文件是否存在,再用pathlib.Path输出当前目录确认 |
ValueError: Excel file format cannot be determined | 文件后缀是xlsx,实际是旧版xls或CSV | 用openpyxl或xlrd指定引擎,或者先打开文件另存为正确格式 |
| 日期列变成了一串数字(如 44652) | Excel日期被pandas读成数字 | 读取时加parse_dates=["日期"],或者在读取后强制pd.to_datetime |
| 中文列名读出来乱码 | 文件编码问题,xlsx一般不会,cvs会 | 如果是CSV文件,读取时指定encoding="gbk"或encoding="utf-8" |
| 合并后行数明显偏少 | 部分文件读取失败,被跳过 | 在循环里加上 try/except,输出失败文件名和错误信息 |
| 数字列混入文本符号导致计算报错 | 单元格里有空格、¥、,等 | 先astype(str)再str.replace清理,最后转astype(float) |
| 文件被占用无法写入 | 目标Excel没关闭 | 写入前检查目标文件是否被打开,先关闭再跑脚本 |
这里最值得单独说的是 try/except 的用法。很多初学者写脚本时不加异常捕获,一遇到脏数据就整个中断,前面处理了四十个文件,卡在第四十一个,前面的结果也白跑了。我在实际项目中,每个文件读取环节都套上try/except,保证单个文件出错不会拖垮整个流程。代码写出来是这样的:
for f in files: try: temp_df = pd.read_excel(f) df_list.append(temp_df) except Exception as e: print(f"读取文件 {f.name} 失败:{e}") continue打印错误信息后继续跑,最后统一看哪几个文件有问题,再人工去处理。这种方式比脚本一报错就停下来排查效率高得多。
4.2 排查逻辑与避坑经验
光知道报错怎么处理还不够,我还想分享几个排查思路,这些思路比具体代码更值钱。
第一个经验:永远先看原始数据类型。pandas读取Excel后,你可以用df.dtypes查看每个列的类型。类型不对,后面的计算一定会出问题。我之前遇到过一列“金额”读出来是object类型,打印出来才发现里面混着“10,000.50”这种带千分位逗号的字符串,还有个“拒付”字样。光靠肉眼扫数据根本看不出异常,一统计就露馅了。
第二个经验:养成“分步验证”的习惯。脚本不要一口气写太长,每写完一步,就用print把中间结果打印出来看一眼。我在写合并脚本时,每次读取完一个文件就打印一行行数,合并完之后打印总行数。确认没问题再往下一步走。如果最后发现总数不对,凭中间打印结果是能定位到具体哪一步出了问题。
第三个经验:特别注意空值和重复值。合并前先检查是否存在整行全空的数据,统计前先确认是否有重复记录。我见过一些报表里同一个订单号出现了两次,合表后销售额翻倍,最后被领导打回来。所以现在我的脚本里都会加一段去重和空值检查:
duplicate_count = merged_df.duplicated(subset=["订单号"]).sum() print(f"重复订单数:{duplicate_count}") if duplicate_count > 0: print(merged_df[merged_df.duplicated(subset=["订单号"], keep=False)])这个检查的作用就是“问题早暴露”,别等到交付了才被发现。
4.3 关于性能的心里话
有些人在处理表格自动化时,会过度担心性能问题。其实对于大多数日常表格场景,几十个文件、几万行数据,pandas处理起来都是秒级,完全不需要做太多优化。真正需要关注性能的是百万行以上的超大文件,那种情况下可以考虑用chunksize分块读取,或者用dask并行处理——但这属于少数场景,日常办公基本遇不到。
我更想提醒的是另一件事:自动化脚本的维护成本。脚本写完后隔了一段时间,源表结构可能变了,列名改了、多了几列、表头行数变了。这些变化会让脚本报错或产生错误结果。所以我的习惯是,每跑一次脚本就顺手看一眼输出结果,不要完全不管。定时任务可以自动跑,但检查结果这个动作,还是得留一份心力。把“检查结果”做成脚本的一部分,比如输出统计摘要、校验关键指标,能省不少心。
5. 表格自动化脚本的封装与复用
前面的脚本都是独立跑的,但日常工作中,如果你只写一次就丢到一边,那自动化的价值就打折了。真正好用的是一个能复用的脚本框架,你可以把通用的读取、清洗、合并逻辑封装起来,下次遇到新任务时直接调用、改改参数就行。这一节我讲讲如何把流程封装成自己的“小工具库”。
5.1 把常用逻辑封装成函数
对不熟悉编程的读者来说,函数可以理解成一个“加工工序”:输入一张表,返回一张干净的、可以合并的表。我在实际工作里,把“读取文件并做基础清洗”封装成一个函数,好处有两个:一是代码不重复,二是逻辑统一——所有文件都走同一套清洗流程,不会因为某个文件特殊就漏掉某步处理。
举个例子,我处理门店日报时,每天都要做:读取Excel、统一列名、转日期、清洗金额。这个流程固定不变,我就把它封装成函数:
def load_and_clean_excel(file_path): """读取 Excel 并执行基础的清洗操作,返回清洗后的 DataFrame""" df = pd.read_excel(file_path) df = df.rename(columns=col_mapping) df["日期"] = pd.to_datetime(df["日期"], errors="coerce").dt.strftime("%Y-%m-%d") df["销售额"] = pd.to_numeric( df["销售额"].astype(str).str.replace(",", "", regex=False), errors="coerce" ) df["退款额"] = pd.to_numeric( df["退款额"].astype(str).str.replace(",", "", regex=False), errors="coerce" ) return df封装完之后,主流程就变得非常清爽:
for f in files: df = load_and_clean_excel(f) df_list.append(df) merged_df = pd.concat(df_list, ignore_index=True) merged_df["净销售额"] = merged_df["销售额"] - merged_df["退款额"]这种写法最大的价值是:当表格清洗规则调整时,只需要改一个函数,所有文件都会同步变化,不用改主流程。比如某天你发现日期还需要提取成月份列,只要在清洗函数里加一行就行。
5.2 用配置文件分离“参数”和“逻辑”
再进一步,如果你要处理的任务比较多,或者需要把脚本交给同事用,我建议把“哪些参数会变”和“逻辑本身”分开。这里我用最简单的做法:一个config.py文件,专门放可变参数。
# config.py FOLDER = "./daily_reports" COLUMN_MAPPING = { "门店名称": "门店", "店名": "门店", "日期": "日期", "销售额(元)": "销售额", } OUTPUT_FILE = "门店汇总日报.xlsx"主脚本里通过import config来引用这些参数。这样下次换任务,只需要改配置文件,主脚本一行都不用动。这个做法让脚本更接近“标准产品”,而不是只能自己用的临时工具。
5.3 模板工作簿的妙用
最后分享一个让输出表“颜值”大幅提升的技巧:结合openpyxl使用预设好的Excel模板工作簿。
具体做法是:手动建一个Excel文件,把表头、字体、列宽、颜色全部设置好,里面不放数据,作为模板保存。脚本运行后,用openpyxl打开这个模板,把DataFrame的数据逐行写入模板,然后另存为新的结果文件。这样出来的报表既整洁又好看,完全摆脱“程序生成的表格特别丑”的印象。
写入模板的核心代码示例:
from openpyxl import load_workbook from openpyxl.utils.dataframe import dataframe_to_rows wb = load_workbook("模板.xlsx") ws = wb.active # 从第2行开始写数据,因为第1行是表头 for row in dataframe_to_rows(merged_df, index=False, header=False): ws.append(row) # 调整列宽(这里简单处理,按列内容长度自适应) for column_cells in ws.columns: max_length = max(len(str(cell.value)) if cell.value else 0 for cell in column_cells) adjusted_width = min(max_length + 2, 30) ws.column_dimensions[column_cells[0].column_letter].width = adjusted_width wb.save("最终报表.xlsx")这个方案我在做月度经营分析表时用得最多。数据都在pandas里算好,最终用模板做排版,领导和同事看着都舒服,自己也省心。唯一要注意的是,模板文件一定要保留一个副本,别被脚本覆盖,否则下次就没模板可用了。
写在最后:自动化不是终点,解放时间才是
表格处理自动化做到最后,我最大的感受是:不要把自动化当成一个炫技的项目,它真正的目的是帮你把时间从重复劳动里抠出来。以前月末要花整个下午做的汇总,现在脚本五分钟跑完,剩下来的时间可以拿去核对异常数据、分析业务变化,这才是人应该做的事。
我个人的一个习惯是:每写完一个自动化脚本,都会在文件顶部写清楚脚本用途、运行方式、依赖的库版本。隔了几个月再回头看,这段注释能帮你省下大量重新理解代码的时间。最后再分享一个小技巧:自动化脚本别乱删,哪怕是临时任务,也统一放在一个工作目录里。几个月后你大概率会发现,当年写的一个脚本改改路径,又能解决眼下的新问题,这种感觉比重新写一遍舒服得多。