2026-10-07 · 喵窝资源铺
场景:部门活动收报名,第一天一轮接龙、第二天补一轮、活动前一天又改一轮——同一个张三报了两次还把「部门A」改成「带家属」,王五中途换了手机号。三轮 Excel 人工合并,十个人能合出九种结果。这篇给一个脚本(jielong_merge.py):多轮接龙文本一起喂进去,同名去重只留最新一轮,谁改了什么逐条列出,直接出汇总 xlsx。代码实跑验证,真实输出见下。
先 pip install pandas openpyxl,每轮接龙各自存成 txt(全选复制粘贴即可),运行 python jielong_merge.py round1.txt round2.txt round3.txt 汇总表.xlsx(文件顺序=轮次顺序,后面的覆盖前面的):
# -*- coding: utf-8 -*-
"""多轮微信群接龙合并去重:同名只留最新一轮。用法 python jielong_merge.py r1.txt r2.txt [...] out.xlsx"""
import re, sys
import pandas as pd
def parse(fp):
rows = []
for line in open(fp, encoding="utf-8"):
line = line.strip()
if not line:
continue
line = re.sub(r'^[\d0-9]+\s*[\.、\)).]\s*', '', line) # 剥行首编号(含全角)
line = line.replace(':', ':')
m = re.match(r'([一-龥A-Za-z·]{2,8})\s*[::,,]?\s*(*)', line) # 冒号可选
if not m:
continue
name, rest = m.group(1), m.group(2).strip()
pm = re.search(r'1[3-9]\d{9}', rest)
phone = ''
if pm:
phone = pm.group(0)
rest = rest.replace(pm.group(0), '').strip(' ::,,')
rows.append({'姓名': name, '手机号': phone, '备注': rest})
return rows
files = [a for a in sys.argv[1:] if a.endswith('.txt')]
out = sys.argv[-1]
merged, hits = {}, []
for rnd, fp in enumerate(files, 1):
for r in parse(fp):
if r['姓名'] in merged:
hits.append((r['姓名'], rnd, r['备注'], merged[r['姓名']]['备注']))
merged[r['姓名']] = {**r, '轮次': rnd}
df = pd.DataFrame([merged[k] for k in merged])
df.to_excel(out, index=False)
# 手机号列整列设文本格式,防止 Excel 转科学计数法
from openpyxl import load_workbook
wb = load_workbook(out); ws = wb.active
for row in ws.iter_rows(min_row=2, min_col=2, max_col=2):
row[0].number_format = '@'
wb.save(out)
print(f'共 {len(files)} 轮,去重后 {len(df)} 人 -> {out}')
for name, rnd, new, old in hits:
print(f' {name}: 第{rnd}轮「{new}」覆盖旧「{old}」')
造了 3 轮接龙共 14 行,故意埋了:同人多轮重复、换手机号、只改备注、无冒号行、全角编号、混进一条管理员通知。跑一遍的输出:
共 3 轮,去重后 8 人 -> out_merge3.xlsx --- 重复报名(留最新) --- 张三: 第2轮「部门A 带家属」覆盖旧「部门A」 李四: 第2轮「部门B」覆盖旧「部门B」 王五: 第3轮「王五换号了」覆盖旧「」 赵六: 第3轮「不要辣 改两份」覆盖旧「不要辣」 小明: 第3轮「帮小元代订」覆盖旧「帮小元代订」 姓名 手机号 备注 轮次 张三 13812345678 部门A 带家属 2 李四 13987654321 部门B 2 王五 13699990000 王五换号了 3 赵六 不要辣 改两份 3 孙七 13566667777 2 小明 13322223333 帮小元代订 3 这不是接龙 管理员发的通知 3 陈二 13055556666 3
14 行进 8 人出,5 处重复逐条列出,改了什么一目了然;换号的王五自动带上新号码;全角编号「1.」和无冒号的「赵六 不要辣 改两份」都正常解析。幂等验证:同样的输入重跑一遍,读回来的表格数据逐格一致(xlsx 是 zip 压缩包,字节 md5 会因内嵌时间戳不同而变化,比数据不比字节)。
13812345678,下游用 pandas 读回来变成 1.381235e+10,后 3 位永久丢失,拿去比对永远匹配不上。解法是写完用 openpyxl 把手机号整列 number_format='@' 设成文本。验证方法是读回来再打印,光看写入时的控制台输出发现不了。[::,,]?),不然整行被丢掉、人数悄悄变少——而且没人会注意到。这脚本按「姓名 + 手机号 + 备注」通用格式写的。如果你的接龙要按选项分组统计(选A多少人选B多少人)、要跟签到表再核对谁没来,逻辑要再包一层,可以直接找我们代写(见下)。
懒得自己跑?找我们代写
喵窝资源铺提供 Python 脚本代写服务:你说清楚接龙格式和要什么表,我们写好、用你的真实聊天记录测试通过再交付,24 小时内出活。AI 服务,明码标价,先看效果再付款(虚拟物品不退款,不满意免费重做)。
👉 了解代写服务 | 联系我们
📖 相邻文章:接龙按选项分组统计票数 · 报名名单×签到表核对谁没来 · 单轮接龙统计成Excel · 聊天记录批量提取待办 · 两张表人名模糊匹配合并 · Excel 按关键列去重留最新 · 博客目录
汇总表仅供参考,最终名单请以群内原始接龙消息为准。