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
相关产品推荐
相关产品推荐

