如何用Python将Google Chat历史从新到旧改为旧到新并格式化?
用Python调整Google Chat聊天记录顺序并格式化
需求分析
你需要将Google Chat(原Hangouts)导出的新到旧排序聊天记录,转换为旧到新的顺序,同时统一格式为 [DD/MM/YYYY, HH:MM:SS AM/PM] 用户名: 消息内容 的样式。
实现代码及说明
以下是针对你提供的原始记录格式编写的完整Python代码:
import re from datetime import datetime def process_chat_records(raw_content): # 分割每条独立聊天记录(以"From "开头为分隔标记) records = re.split(r'(?=From )', raw_content.strip()) chat_data = [] for record in records: if not record.strip(): continue # 提取原始时间字符串并转换为datetime对象 time_match = re.search(r'(\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2} \+\d{4} \d{4})', record) if not time_match: continue dt = datetime.strptime(time_match.group(1), '%a %b %d %H:%M:%S %z %Y') # 格式化为目标时间样式 formatted_time = dt.strftime('%d/%m/%Y, %I:%M:%S %p') # 提取发件人用户名 sender_match = re.search(r'From: (\w+)', record) sender = sender_match.group(1) if sender_match else "Unknown" # 提取消息内容 content_match = re.search(r'Content-Type: text/plain\n\n(.*)', record, re.DOTALL) message = content_match.group(1).strip() if content_match else "" chat_data.append({ 'time': dt, 'formatted_time': formatted_time, 'sender': sender, 'message': message }) # 按时间升序排序(旧到新) chat_data.sort(key=lambda x: x['time']) # 生成最终格式化文本 result_lines = [] for item in chat_data: result_lines.append(f"[{item['formatted_time']}] {item['sender']}: {item['message']}") return '\n'.join(result_lines) # 实际使用示例 if __name__ == "__main__": # 读取原始聊天记录文件 with open('hangouts_raw.txt', 'r', encoding='utf-8') as f: raw_text = f.read() # 处理并生成格式化内容 formatted_chat = process_chat_records(raw_text) # 写入新文件 with open('formatted_chat.txt', 'w', encoding='utf-8') as f: f.write(formatted_chat)
关键细节说明
- 记录分割:用正则正向预查
(?=From )分割,避免破坏每条记录的开头标识。 - 时间处理:将原始时间字符串转换为
datetime对象,既方便排序,也能直接格式化为目标样式。 - 信息提取:通过正则精准匹配发件人和消息内容,兼容原始记录中的排版空白。
- 排序逻辑:利用
datetime对象的可比较性,直接按时间升序排序实现旧到新的顺序。
使用提示
- 将原始聊天记录保存为
hangouts_raw.txt放在代码同一目录,或修改代码中的文件路径。 - 如果用户名包含空格,可将正则中的
(\w+)改为(.+?)来适配。 - 如需转换为本地时区,可在
dt对象上调用astimezone()方法调整。
内容的提问来源于stack exchange,提问作者Ahleya Sheikh
相关产品推荐
相关产品推荐

