多轮微信群接龙合并去重:同一人重复报名只留最新

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 行 → 去重后 8 人,5 处重复全揪出

造了 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 会因内嵌时间戳不同而变化,比数据不比字节)。

三个真坑(都是这轮实跑踩出来的)

这脚本按「姓名 + 手机号 + 备注」通用格式写的。如果你的接龙要按选项分组统计(选A多少人选B多少人)、要跟签到表再核对谁没来,逻辑要再包一层,可以直接找我们代写(见下)。

懒得自己跑?找我们代写
喵窝资源铺提供 Python 脚本代写服务:你说清楚接龙格式和要什么表,我们写好、用你的真实聊天记录测试通过再交付,24 小时内出活。AI 服务,明码标价,先看效果再付款(虚拟物品不退款,不满意免费重做)。
👉 了解代写服务 | 联系我们

📖 相邻文章:接龙按选项分组统计票数 · 报名名单×签到表核对谁没来 · 单轮接龙统计成Excel · 聊天记录批量提取待办 · 两张表人名模糊匹配合并 · Excel 按关键列去重留最新 · 博客目录

汇总表仅供参考,最终名单请以群内原始接龙消息为准。