写了个自动生成周报的 Python 脚本,我每周多摸半天鱼还被夸敬业
又名:《当你的周报比你本人还努力时,你就知道这班快上到头了》
周五下午三点,办公室的空调吹得人昏昏欲睡。我盯着屏幕上空白的周报文档,上周的回忆像被格式化了似的——我只记得自己刷了 4 天知乎,摸了 3 天鱼,开了 2 场没结论的会,写了 1 行有效代码。但是领导要求的周报,得写出“深度思考”和“业务赋能”。
就在我准备第 47 次编造“优化了系统架构”时,脑子里突然响起一句古训:“人类区别于动物的标志是使用工具。” 我一个写了五年 Python 的 CRUD 选手,怎么能被区区周报卡住脖子?
是时候让真正的技术上场了。
01一、需求分析(理直气壮地摸鱼前摇)
我仔细复盘了自己过去 20 篇周报的套路,发现领导爱看的周报有三大要素:
- 进度感:你永远在路上,本周完成了 80%,下周完成剩下的 20%……以及那 20% 里又拆出的新的 80%。
- 术语浓度:赋能、闭环、抓手、对齐、颗粒度、底层逻辑……词越虚,活越显得高级。
- 自我批评但实际不用改:比如“思考不够深入”,翻译过来就是“我懒得想了”。
至于具体干了什么?不重要,重要的是看起来一直在干。
摸清了套路,方案就很简单:写一个 Python 脚本,自动从我的 Git 提交记录里扒关键词,再套进一个周报模板,用祖传的随机废话生成器润色,最后自动发邮件给领导。
我甚至连脚本名字都想好了:weekly_report_generator.py,简称 WRG(我日拱),寓意每天拱一点,实则全自动。
02二、核心代码:让 Git 替我说实话
第一步,从 Git 提交记录里抓本周的 commit message。领导不是总说“代码会说话”吗?那我就让它说个痛快。
import subprocess
from datetime import datetime, timedelta
def get_this_week_commits():
# 获取本周一的日期
today = datetime.today()
monday = today - timedelta(days=today.weekday())
since = monday.strftime('%Y-%m-%d')
cmd = f'git log --author="你的名字" --since="{since}" --pretty=format:"%s"'
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
commits = result.stdout.strip().split('\n')
return [c for c in commits if c] # 过滤空行
然后我满怀期待地运行了一下,本周的 commit message 如下:
fix: 修复了登录页按钮圆角不圆的问题
fix: 又修了一下
fix: 真的修好了
chore: 下班
对着屏幕沉默了五秒钟。我意识到,如果直接把“chore: 下班”写进周报,明天我可能就真的永远下班了。
必须给这些实话加上一层厚厚的“互联网黑话”滤镜。
03三、翻译魔法:从“修按钮”到“提升用户体验闭环”
我精心准备了一个术语升维映射表,可以把朴实无华的动作翻译成老板看不懂的样子:
BUZZWORD_MAP = {
"修复": ["深度排查并解决了线上潜在风险", "对核心链路进行了一次定向优化"],
"修改": ["重构了部分底层逻辑", "完成了模块间的解耦升级"],
"添加": ["引入了新的能力拼图", "完成了功能矩阵的扩充"],
"删除": ["清理了历史技术债务", "对非核心路径进行了瘦身"],
"下班": ["按计划推进了本日工作流闭环", "进行了必要的精力管理"],
# 如果 commit 信息太短,随机补一个高大上的背景
"fallback": [
"围绕业务北极星指标,进行了底层技术设施的迭代思考",
"与跨团队同学对齐了下一阶段的技术方案颗粒度",
"针对现有架构进行了新一轮的可行性复盘"
]
}
接着,写一个核心翻译函数,把原始 commit 转换成周报条目:
import random
def translate_to_report(commit_msg):
for key, replacements in BUZZWORD_MAP.items():
if key in commit_msg:
return random.choice(replacements)
# 什么都没匹配到,就说明这活干得太抽象了,用 fallback
return random.choice(BUZZWORD_MAP["fallback"])
# 示例
raw = "fix: 修复了登录页按钮圆角不圆的问题"
elegant = translate_to_report(raw)
print(elegant)
# 输出示例:深度排查并解决了线上潜在风险,保障了用户交互体验的流畅性
仅仅翻译还不够,周报需要完整的结构:本周进展、风险同步、下周计划、思考沉淀。我又写了一个基于模板的周报生成器,把那些 commit 翻译出来的“辉煌成果”填进去。
def generate_report_body(commits):
translated = [translate_to_report(c) for c in commits]
# 去重,防止显得像复读机
translated = list(dict.fromkeys(translated))
# 如果这周 commit 太少,说明摸鱼太狠,必须用高度抽象的思考来凑
while len(translated) < 3:
translated.append(random.choice(BUZZWORD_MAP["fallback"]))
report = f"""
【本周核心产出】
{chr(10).join(f'• {item}' for item in translated)}
【风险与卡点】
暂无重大风险。部分技术细节仍需深入打磨,预计不影响整体排期。
【下周工作规划】
1. 持续对核心模块进行深耕,强化系统鲁棒性;
2. 对齐业务方最新需求,完成方案评估与拆解;
3. 推进历史遗留问题的治理,降低维护成本。
【思考沉淀】
本周在业务支撑过程中发现,只有不断对系统进行抽象和内聚,才能从底层打通能力壁垒,真正实现技术赋能业务。后续将持续沉淀方法论,形成可复用的技术资产。
"""
return report.strip()
你看,连“思考沉淀”都自动生成了。领导如果仔细看,会发现这段话适用于前端、后端、数据、运维、甚至门口保安,但他不会仔细看的——因为他的周报也得往上交,他也在愁怎么把他的周报翻成 CTO 爱看的模样。
04四、点睛之笔:集成 AI,让废话更有温度
后来我嫌词库太死板,索性接入了大模型 API(公司禁止用外部 AI?我用的可是本地部署的,连网线都不用,主打一个合规摸鱼)。
# 伪代码,但你懂的
def ai_polish(text):
prompt = f"请将以下技术周报内容润色得更专业、更有深度,并适当加入行业前沿术语,但不要改变核心意思:\n{text}"
response = local_llm(prompt)
return response
效果拔群。原本的“修了按钮圆角”被 AI 润色成了:
本周针对用户触点核心交互路径进行了像素级重构,通过精细化调整视觉反馈机制,强化了品牌一致性感知,并沉淀了移动端适配的工程化方案。
领导看到后,在群里连发三个大拇指,附带一句:“大家学习一下,这个思考深度。”
那一刻,我流下了感动又心虚的泪水。
05五、全自动化:我连发送都懒得点
脚本写好后,我设置了定时任务。每周五下午五点半,趁我还在假装忙碌时,电脑自动执行:
# crontab -e 里添加
30 17 * * 5 /usr/bin/python3 /home/user/weekly_report_generator.py --send
脚本内部调用 SMTP 发邮件,发件人是我,收件人是领导,还特地设置了延时随机发送(避免每次都是整点,显得像机器人)。邮件正文排版精美,纯文本格式,绝不带一个 HTML 标签,伪装成我亲手敲的。
整个流程跑通之后,我每周五下午拥有了完整的半天自由。我可以在工位上明目张胆地看《代码大全》,也可以带着降噪耳机听播客,甚至去楼下健身房洗个澡。所有人看到我都觉得:“这哥们儿,对着屏幕一皱眉头,肯定又在对齐什么颗粒度了。”
只有我的电脑知道,它刚刚代替我产出了一篇充满赋能、闭环、复盘的杰作。
06六、差点翻车:脚本发疯事件
有一次,Git 提交记录里有一条不该出现的内容——是前一天加班到崩溃时写的 commit:
feat: 实在编不下去了,这破需求谁爱做谁做
脚本忠实地将它捕获,翻译函数刚好匹配上了“feat”却没有对应的优化词汇,直接滑进了 fallback 池子里,最终生成的周报中赫然写着:
本周在推进业务支撑过程中,针对现有架构进行了深度思考,结论是:这破需求谁爱做谁做。
万幸,我在发送前五分钟突然心念一动,手动检查了一遍预览。看到这句话的瞬间,冷汗湿透了我的机械键盘。我以这辈子最快的手速改了代码——在 translate_to_report 里加了一个敏感词拦截列表。
从那以后,我的脚本多了一个 --dry-run 参数。摸鱼归摸鱼,安全意识不能丢。
07七、结尾:别让这篇文章被你的领导看到
靠着 WRG 脚本,我每周稳定摸鱼 4 小时,产出 0 行有效工作,但周报评分从 B+ 涨到了 A。上个月领导甚至让我在团队里做了一次“如何高效撰写周报”的分享。
分享会上,我面不改色地讲了 20 分钟“结构化思考”、“金字塔原理”,底下同事疯狂记笔记。我的脚本安静地躺在硬盘里,像一个沉默的功臣。
这就是当代赛博打工人的生活——你用代码消解了无意义的劳动,转头就被夸奖劳动姿势标准。
最后的忠告:脚本虽好,可不要贪杯。 如果你的领导也关注了技术博客,请你一定要把敏感词过滤写全,并且记得在代码注释里加一行:
# 本脚本仅供学习交流,实际使用请严格遵守公司信息安全规范
# 出了事别供出我
(全文完,作者已匿)
声明:本文纯属技术娱乐,旨在展示 Python 在自动化办公中的潜力。请尊重每一份工作,也请善待每一个写周报的打工人。如果看完你也想动手,建议先拿自己的日记练手。
每日福利