You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python处理WhatsApp聊天文本:合并非格式行问题求助

处理WhatsApp聊天消息中的换行合并问题

需求:将WhatsApp聊天文本中,消息内部的换行行合并到对应消息条目里,仅保留以[dd/mm/开头的行作为独立消息的分隔,后续非格式行全部合并到上一条有效消息中,直到遇到下一个格式行。

示例输入文本

[31/08/2020, 15:07:29] Paulo Bombinhas: Temos sim. Precisamos ver com o condomínio boulevard como vai ficar para reservar. Semana passada quando falei com eles dissseram que até então a capacidade de ocupação dos aptos está em 50% ou seja apenas 3 pessoas por apartamento
[31/08/2020, 15:08:41] Maria: Deste jeito não alugara né
[31/08/2020, 15:12:21] Paulo Bombinhas: Com essa taxa de ocupação fica bem difícil alugar. Mas acredito que para o verão já esteja normalizado
[10/09/2020, 11:04:25] Maria: Eu te passo
[11/09/2020, 10:45:21] Maria: administradora de Bens Ltda
36572992/0001-79
Caixa 104
Agência 4111
C/ C 245551-7 operação 005511
[15/09/2020, 06:36:31] Paulo Bombinhas: Bom dia Maria. Hoje vou passar o dia com a Livia para terminar o relatório e caso haja pendências já acertarmos também. Preciso entrar em contato por telefone também, me avise o melhor horário por favor.
[15/09/2020, 08:07:58] Maria: Bom dia Paulo. Que ótimo!  

修正后的Python代码

import re

def process_chat_files(filename):
    # 匹配消息开头的正则:以[dd/开头
    pattern = r'^\[\d{2}\/'
    processed_lines = []
    current_message = None

    with open(filename, 'r') as file:
        for line in file:
            # 移除行尾换行符,避免重复添加
            stripped_line = line.rstrip('\n')
            # 跳过空行
            if not stripped_line:
                continue
            
            if re.match(pattern, stripped_line):
                # 遇到新消息,先把之前构建的消息存入结果列表
                if current_message is not None:
                    processed_lines.append(current_message)
                # 初始化新的消息
                current_message = stripped_line
            else:
                # 非消息开头行,追加到当前消息后(保留原换行格式)
                if current_message is not None:
                    current_message += '\n' + stripped_line
    
    # 处理最后一条未存入的消息
    if current_message is not None:
        processed_lines.append(current_message)
    
    # 将结果写入文件
    with open('./whats/_chat_to_join_fixed.txt', 'w') as file:
        for msg in processed_lines:
            file.write(msg + '\n')

核心逻辑说明

  • 用current_message变量持续跟踪正在构建的当前消息,避免直接操作列表引发的逻辑混乱
  • 遍历每行时先清理行尾换行符,跳过空行保证结果整洁
  • 遇到符合格式的消息行时,先将之前攒好的消息存入结果列表,再启动新的消息构建
  • 非格式行直接追加到当前消息末尾,用换行连接保留原消息的排版格式
  • 循环结束后必须处理最后一条未存入的消息,避免遗漏

内容的提问来源于stack exchange,提问作者brpl20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:42:01