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

如何用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对象的可比较性,直接按时间升序排序实现旧到新的顺序。

使用提示

  1. 将原始聊天记录保存为hangouts_raw.txt放在代码同一目录,或修改代码中的文件路径。
  2. 如果用户名包含空格,可将正则中的(\w+)改为(.+?)来适配。
  3. 如需转换为本地时区,可在dt对象上调用astimezone()方法调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:25:22